{-
   Vikunja API

   # Pagination Every endpoint capable of pagination will return two headers: * `x-pagination-total-pages`: The total number of available pages for this request * `x-pagination-result-count`: The number of items returned for this request. # Rights All endpoints which return a single item (project, task, etc.) - no array - will also return a `x-max-right` header with the max right the user has on this item as an int where `0` is `Read Only`, `1` is `Read & Write` and `2` is `Admin`. This can be used to show or hide ui elements based on the rights the user has. # Errors All errors have an error code and a human-readable error message in addition to the http status code. You should always check for the status code in the response, not only the http status code. Due to limitations in the swagger library we're using for this document, only one error per http status code is documented here. Make sure to check the [error docs](https://vikunja.io/docs/errors/) in Vikunja's documentation for a full list of available error codes. # Authorization **JWT-Auth:** Main authorization method, used for most of the requests. Needs `Authorization: Bearer <jwt-token>`-header to authenticate successfully.  **API Token:** You can create scoped API tokens for your user and use the token to make authenticated requests in the context of that user. The token must be provided via an `Authorization: Bearer <token>` header, similar to jwt auth. See the documentation for the `api` group to manage token creation and revocation.  **BasicAuth:** Only used when requesting tasks via CalDAV. <!-- ReDoc-Inject: <security-definitions> -->

   OpenAPI Version: 3.0.1
   Vikunja API API version: 0.24.6
   Contact: hello@vikunja.io
   Generated by OpenAPI Generator (https://openapi-generator.tech)
-}

{-|
Module : Vikunja.API.Team
-}

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-imports #-}

module Vikunja.API.Team where

import Vikunja.Core
import Vikunja.MimeTypes
import Vikunja.Model as M

import qualified Data.Aeson as A
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
import qualified Data.Data as P (Typeable, TypeRep, typeOf, typeRep)
import qualified Data.Foldable as P
import qualified Data.Map as Map
import qualified Data.Maybe as P
import qualified Data.Proxy as P (Proxy(..))
import qualified Data.Set as Set
import qualified Data.String as P
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TL
import qualified Data.Time as TI
import qualified Network.HTTP.Client.MultipartFormData as NH
import qualified Network.HTTP.Media as ME
import qualified Network.HTTP.Types as NH
import qualified Web.FormUrlEncoded as WH
import qualified Web.HttpApiData as WH

import Data.Text (Text)
import GHC.Base ((<|>))

import Prelude ((==),(/=),($), (.),(<$>),(<*>),(>>=),Maybe(..),Bool(..),Char,Double,FilePath,Float,Int,Integer,String,fmap,undefined,mempty,maybe,pure,Monad,Applicative,Functor)
import qualified Prelude as P

-- * Operations


-- ** Team

-- *** teamsGet

-- | @GET \/teams@
-- 
-- Get teams
-- 
-- Returns all teams the current user is part of.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsGet
  :: VikunjaRequest TeamsGet MimeNoContent [ModelsTeam] MimeJSON
teamsGet :: VikunjaRequest TeamsGet MimeNoContent [ModelsTeam] MimeJSON
teamsGet =
  Method
-> [ByteString]
-> VikunjaRequest TeamsGet MimeNoContent [ModelsTeam] MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"GET" [ByteString
"/teams"]
    VikunjaRequest TeamsGet MimeNoContent [ModelsTeam] MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest TeamsGet MimeNoContent [ModelsTeam] MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)

data TeamsGet  

-- | /Optional Param/ "page" - The page number. Used for pagination. If not provided, the first page of results is returned.
instance HasOptionalParam TeamsGet Page where
  applyOptionalParam :: VikunjaRequest TeamsGet contentType res accept
-> Page -> VikunjaRequest TeamsGet contentType res accept
applyOptionalParam VikunjaRequest TeamsGet contentType res accept
req (Page Int
xs) =
    VikunjaRequest TeamsGet contentType res accept
req VikunjaRequest TeamsGet contentType res accept
-> [QueryItem] -> VikunjaRequest TeamsGet contentType res accept
forall req contentType res accept.
VikunjaRequest req contentType res accept
-> [QueryItem] -> VikunjaRequest req contentType res accept
`addQuery` (Method, Maybe Int) -> [QueryItem]
forall a. ToHttpApiData a => (Method, Maybe a) -> [QueryItem]
toQuery (Method
"page", Int -> Maybe Int
forall a. a -> Maybe a
Just Int
xs)

-- | /Optional Param/ "per_page" - The maximum number of items per page. Note this parameter is limited by the configured maximum of items per page.
instance HasOptionalParam TeamsGet PerPage where
  applyOptionalParam :: VikunjaRequest TeamsGet contentType res accept
-> PerPage -> VikunjaRequest TeamsGet contentType res accept
applyOptionalParam VikunjaRequest TeamsGet contentType res accept
req (PerPage Int
xs) =
    VikunjaRequest TeamsGet contentType res accept
req VikunjaRequest TeamsGet contentType res accept
-> [QueryItem] -> VikunjaRequest TeamsGet contentType res accept
forall req contentType res accept.
VikunjaRequest req contentType res accept
-> [QueryItem] -> VikunjaRequest req contentType res accept
`addQuery` (Method, Maybe Int) -> [QueryItem]
forall a. ToHttpApiData a => (Method, Maybe a) -> [QueryItem]
toQuery (Method
"per_page", Int -> Maybe Int
forall a. a -> Maybe a
Just Int
xs)

-- | /Optional Param/ "s" - Search teams by its name.
instance HasOptionalParam TeamsGet S where
  applyOptionalParam :: VikunjaRequest TeamsGet contentType res accept
-> S -> VikunjaRequest TeamsGet contentType res accept
applyOptionalParam VikunjaRequest TeamsGet contentType res accept
req (S Text
xs) =
    VikunjaRequest TeamsGet contentType res accept
req VikunjaRequest TeamsGet contentType res accept
-> [QueryItem] -> VikunjaRequest TeamsGet contentType res accept
forall req contentType res accept.
VikunjaRequest req contentType res accept
-> [QueryItem] -> VikunjaRequest req contentType res accept
`addQuery` (Method, Maybe Text) -> [QueryItem]
forall a. ToHttpApiData a => (Method, Maybe a) -> [QueryItem]
toQuery (Method
"s", Text -> Maybe Text
forall a. a -> Maybe a
Just Text
xs)
-- | @application/json@
instance Produces TeamsGet MimeJSON


-- *** teamsIdDelete

-- | @DELETE \/teams\/{id}@
-- 
-- Deletes a team
-- 
-- Delets a team. This will also remove the access for all users in that team.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsIdDelete
  :: Id -- ^ "id" -  Team ID
  -> VikunjaRequest TeamsIdDelete MimeNoContent ModelsMessage MimeJSON
teamsIdDelete :: Id
-> VikunjaRequest
     TeamsIdDelete MimeNoContent ModelsMessage MimeJSON
teamsIdDelete (Id Int
id) =
  Method
-> [ByteString]
-> VikunjaRequest
     TeamsIdDelete MimeNoContent ModelsMessage MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"DELETE" [ByteString
"/teams/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
id]
    VikunjaRequest TeamsIdDelete MimeNoContent ModelsMessage MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest
     TeamsIdDelete MimeNoContent ModelsMessage MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)

data TeamsIdDelete  
-- | @application/json@
instance Produces TeamsIdDelete MimeJSON


-- *** teamsIdGet

-- | @GET \/teams\/{id}@
-- 
-- Gets one team
-- 
-- Returns a team by its ID.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsIdGet
  :: Id -- ^ "id" -  Team ID
  -> VikunjaRequest TeamsIdGet MimeNoContent ModelsTeam MimeJSON
teamsIdGet :: Id -> VikunjaRequest TeamsIdGet MimeNoContent ModelsTeam MimeJSON
teamsIdGet (Id Int
id) =
  Method
-> [ByteString]
-> VikunjaRequest TeamsIdGet MimeNoContent ModelsTeam MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"GET" [ByteString
"/teams/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
id]
    VikunjaRequest TeamsIdGet MimeNoContent ModelsTeam MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest TeamsIdGet MimeNoContent ModelsTeam MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)

data TeamsIdGet  
-- | @application/json@
instance Produces TeamsIdGet MimeJSON


-- *** teamsIdMembersPut

-- | @PUT \/teams\/{id}\/members@
-- 
-- Add a user to a team
-- 
-- Add a user to a team.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsIdMembersPut
  :: (Consumes TeamsIdMembersPut MimeJSON, MimeRender MimeJSON ModelsTeamMember)
  => ModelsTeamMember -- ^ "team" -  The user to be added to a team.
  -> Id -- ^ "id" -  Team ID
  -> VikunjaRequest TeamsIdMembersPut MimeJSON ModelsTeamMember MimeJSON
teamsIdMembersPut :: ModelsTeamMember
-> Id
-> VikunjaRequest
     TeamsIdMembersPut MimeJSON ModelsTeamMember MimeJSON
teamsIdMembersPut ModelsTeamMember
team (Id Int
id) =
  Method
-> [ByteString]
-> VikunjaRequest
     TeamsIdMembersPut MimeJSON ModelsTeamMember MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"PUT" [ByteString
"/teams/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
id,ByteString
"/members"]
    VikunjaRequest TeamsIdMembersPut MimeJSON ModelsTeamMember MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest
     TeamsIdMembersPut MimeJSON ModelsTeamMember MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)
    VikunjaRequest TeamsIdMembersPut MimeJSON ModelsTeamMember MimeJSON
-> ModelsTeamMember
-> VikunjaRequest
     TeamsIdMembersPut MimeJSON ModelsTeamMember MimeJSON
forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
VikunjaRequest req contentType res accept
-> param -> VikunjaRequest req contentType res accept
`setBodyParam` ModelsTeamMember
team

data TeamsIdMembersPut 

-- | /Body Param/ "team" - The user to be added to a team.
instance HasBodyParam TeamsIdMembersPut ModelsTeamMember 

-- | @application/json@
instance Consumes TeamsIdMembersPut MimeJSON

-- | @application/json@
instance Produces TeamsIdMembersPut MimeJSON


-- *** teamsIdMembersUserIDAdminPost

-- | @POST \/teams\/{id}\/members\/{userID}\/admin@
-- 
-- Toggle a team member's admin status
-- 
-- If a user is team admin, this will make them member and vise-versa.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsIdMembersUserIDAdminPost
  :: Id -- ^ "id" -  Team ID
  -> UserId -- ^ "userId" -  User ID
  -> VikunjaRequest TeamsIdMembersUserIDAdminPost MimeNoContent ModelsMessage MimeJSON
teamsIdMembersUserIDAdminPost :: Id
-> UserId
-> VikunjaRequest
     TeamsIdMembersUserIDAdminPost MimeNoContent ModelsMessage MimeJSON
teamsIdMembersUserIDAdminPost (Id Int
id) (UserId Int
userId) =
  Method
-> [ByteString]
-> VikunjaRequest
     TeamsIdMembersUserIDAdminPost MimeNoContent ModelsMessage MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/teams/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
id,ByteString
"/members/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
userId,ByteString
"/admin"]
    VikunjaRequest
  TeamsIdMembersUserIDAdminPost MimeNoContent ModelsMessage MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest
     TeamsIdMembersUserIDAdminPost MimeNoContent ModelsMessage MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)

data TeamsIdMembersUserIDAdminPost  
-- | @application/json@
instance Produces TeamsIdMembersUserIDAdminPost MimeJSON


-- *** teamsIdMembersUserIDDelete

-- | @DELETE \/teams\/{id}\/members\/{userID}@
-- 
-- Remove a user from a team
-- 
-- Remove a user from a team. This will also revoke any access this user might have via that team. A user can remove themselves from the team if they are not the last user in the team.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsIdMembersUserIDDelete
  :: Id -- ^ "id" -  Team ID
  -> UserId -- ^ "userId" -  User ID
  -> VikunjaRequest TeamsIdMembersUserIDDelete MimeNoContent ModelsMessage MimeJSON
teamsIdMembersUserIDDelete :: Id
-> UserId
-> VikunjaRequest
     TeamsIdMembersUserIDDelete MimeNoContent ModelsMessage MimeJSON
teamsIdMembersUserIDDelete (Id Int
id) (UserId Int
userId) =
  Method
-> [ByteString]
-> VikunjaRequest
     TeamsIdMembersUserIDDelete MimeNoContent ModelsMessage MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"DELETE" [ByteString
"/teams/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
id,ByteString
"/members/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
userId]
    VikunjaRequest
  TeamsIdMembersUserIDDelete MimeNoContent ModelsMessage MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest
     TeamsIdMembersUserIDDelete MimeNoContent ModelsMessage MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)

data TeamsIdMembersUserIDDelete  
-- | @application/json@
instance Produces TeamsIdMembersUserIDDelete MimeJSON


-- *** teamsIdPost

-- | @POST \/teams\/{id}@
-- 
-- Updates a team
-- 
-- Updates a team.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsIdPost
  :: (Consumes TeamsIdPost MimeJSON, MimeRender MimeJSON ModelsTeam)
  => ModelsTeam -- ^ "team" -  The team with updated values you want to update.
  -> Id -- ^ "id" -  Team ID
  -> VikunjaRequest TeamsIdPost MimeJSON ModelsTeam MimeJSON
teamsIdPost :: ModelsTeam
-> Id -> VikunjaRequest TeamsIdPost MimeJSON ModelsTeam MimeJSON
teamsIdPost ModelsTeam
team (Id Int
id) =
  Method
-> [ByteString]
-> VikunjaRequest TeamsIdPost MimeJSON ModelsTeam MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/teams/",Int -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toPath Int
id]
    VikunjaRequest TeamsIdPost MimeJSON ModelsTeam MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest TeamsIdPost MimeJSON ModelsTeam MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)
    VikunjaRequest TeamsIdPost MimeJSON ModelsTeam MimeJSON
-> ModelsTeam
-> VikunjaRequest TeamsIdPost MimeJSON ModelsTeam MimeJSON
forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
VikunjaRequest req contentType res accept
-> param -> VikunjaRequest req contentType res accept
`setBodyParam` ModelsTeam
team

data TeamsIdPost 

-- | /Body Param/ "team" - The team with updated values you want to update.
instance HasBodyParam TeamsIdPost ModelsTeam 

-- | @application/json@
instance Consumes TeamsIdPost MimeJSON

-- | @application/json@
instance Produces TeamsIdPost MimeJSON


-- *** teamsPut

-- | @PUT \/teams@
-- 
-- Creates a new team
-- 
-- Creates a new team.
-- 
-- AuthMethod: 'AuthApiKeyJWTKeyAuth'
-- 
teamsPut
  :: (Consumes TeamsPut MimeJSON, MimeRender MimeJSON ModelsTeam)
  => ModelsTeam -- ^ "team" -  The team you want to create.
  -> VikunjaRequest TeamsPut MimeJSON ModelsTeam MimeJSON
teamsPut :: ModelsTeam -> VikunjaRequest TeamsPut MimeJSON ModelsTeam MimeJSON
teamsPut ModelsTeam
team =
  Method
-> [ByteString]
-> VikunjaRequest TeamsPut MimeJSON ModelsTeam MimeJSON
forall req contentType res accept.
Method -> [ByteString] -> VikunjaRequest req contentType res accept
_mkRequest Method
"PUT" [ByteString
"/teams"]
    VikunjaRequest TeamsPut MimeJSON ModelsTeam MimeJSON
-> Proxy AuthApiKeyJWTKeyAuth
-> VikunjaRequest TeamsPut MimeJSON ModelsTeam MimeJSON
forall authMethod req contentType res accept.
AuthMethod authMethod =>
VikunjaRequest req contentType res accept
-> Proxy authMethod -> VikunjaRequest req contentType res accept
`_hasAuthType` (Proxy AuthApiKeyJWTKeyAuth
forall k (t :: k). Proxy t
P.Proxy :: P.Proxy AuthApiKeyJWTKeyAuth)
    VikunjaRequest TeamsPut MimeJSON ModelsTeam MimeJSON
-> ModelsTeam
-> VikunjaRequest TeamsPut MimeJSON ModelsTeam MimeJSON
forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
VikunjaRequest req contentType res accept
-> param -> VikunjaRequest req contentType res accept
`setBodyParam` ModelsTeam
team

data TeamsPut 

-- | /Body Param/ "team" - The team you want to create.
instance HasBodyParam TeamsPut ModelsTeam 

-- | @application/json@
instance Consumes TeamsPut MimeJSON

-- | @application/json@
instance Produces TeamsPut MimeJSON