From ea9ad8033680f4f084fb7d6434fcacfea7066ab6 Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Thu, 22 Jan 2026 22:51:03 +0100 Subject: [PATCH] Converted the Api to a Restful api. --- backend-actix/gamenight-api.yaml | 508 +++++----- backend-actix/src/main.rs | 52 +- backend-actix/src/request/game.rs | 143 +-- backend-actix/src/request/game_owner.rs | 26 + backend-actix/src/request/game_owners.rs | 27 + backend-actix/src/request/gamenight.rs | 32 + .../src/request/gamenight_participant.rs | 28 + .../src/request/gamenight_participants.rs | 54 ++ .../{gamenight_handlers.rs => gamenights.rs} | 52 +- backend-actix/src/request/games.rs | 54 ++ backend-actix/src/request/join_gamenight.rs | 55 -- backend-actix/src/request/location.rs | 67 +- .../src/request/location_authorized_user.rs | 23 + .../src/request/location_authorized_users.rs | 60 ++ backend-actix/src/request/location_owner.rs | 79 -- backend-actix/src/request/locations.rs | 62 ++ backend-actix/src/request/mod.rs | 48 +- .../src/request/participant_handlers.rs | 31 - backend-actix/src/request/token.rs | 54 ++ backend-actix/src/request/user.rs | 37 + backend-actix/src/request/user_owned_games.rs | 28 + .../request/{user_handlers.rs => users.rs} | 138 +-- .../.openapi-generator/FILES | 12 +- gamenight-api-client-rs/README.md | 45 +- gamenight-api-client-rs/docs/DefaultApi.md | 584 ++++++------ .../docs/EditGameRequestBody.md | 12 + gamenight-api-client-rs/docs/OwnGame.md | 12 + gamenight-api-client-rs/docs/OwnedGame.md | 1 + .../src/apis/default_api.rs | 871 +++++++++--------- .../src/models/edit_game_request_body.rs | 30 + gamenight-api-client-rs/src/models/mod.rs | 12 +- .../src/models/own_game.rs | 30 + .../src/models/owned_game.rs | 5 +- gamenight-database/src/owned_game.rs | 4 +- 34 files changed, 1779 insertions(+), 1497 deletions(-) create mode 100644 backend-actix/src/request/game_owner.rs create mode 100644 backend-actix/src/request/game_owners.rs create mode 100644 backend-actix/src/request/gamenight.rs create mode 100644 backend-actix/src/request/gamenight_participant.rs create mode 100644 backend-actix/src/request/gamenight_participants.rs rename backend-actix/src/request/{gamenight_handlers.rs => gamenights.rs} (55%) create mode 100644 backend-actix/src/request/games.rs delete mode 100644 backend-actix/src/request/join_gamenight.rs create mode 100644 backend-actix/src/request/location_authorized_user.rs create mode 100644 backend-actix/src/request/location_authorized_users.rs delete mode 100644 backend-actix/src/request/location_owner.rs create mode 100644 backend-actix/src/request/locations.rs delete mode 100644 backend-actix/src/request/participant_handlers.rs create mode 100644 backend-actix/src/request/token.rs create mode 100644 backend-actix/src/request/user.rs create mode 100644 backend-actix/src/request/user_owned_games.rs rename backend-actix/src/request/{user_handlers.rs => users.rs} (54%) create mode 100644 gamenight-api-client-rs/docs/EditGameRequestBody.md create mode 100644 gamenight-api-client-rs/docs/OwnGame.md create mode 100644 gamenight-api-client-rs/src/models/edit_game_request_body.rs create mode 100644 gamenight-api-client-rs/src/models/own_game.rs diff --git a/backend-actix/gamenight-api.yaml b/backend-actix/gamenight-api.yaml index 7ff2946..bde95ba 100644 --- a/backend-actix/gamenight-api.yaml +++ b/backend-actix/gamenight-api.yaml @@ -14,9 +14,9 @@ servers: description: Gamenight paths: /token: - get: - summary: '' - operationId: get-token + post: + summary: 'Login a user.' + operationId: post-token responses: '200': $ref: '#/components/responses/TokenResponse' @@ -26,9 +26,10 @@ paths: $ref: '#/components/requestBodies/LoginRequest' description: Submit your credentials to get a JWT-token to use with the rest of the api. parameters: [] + /refresh_token: post: - summary: '' - operationId: post-token + summary: 'Refresh a user token' + operationId: post-refresh-tokenz responses: '200': $ref: '#/components/responses/TokenResponse' @@ -40,6 +41,7 @@ paths: - JWT-Auth: [] /users: get: + summary: 'Get all users' responses: '200': $ref: '#/components/responses/UsersResponse' @@ -48,11 +50,10 @@ paths: '401': $ref: '#/components/responses/FailureResponse' security: - - JWT-Auth: [] - /user: + - JWT-Auth: [] post: - summary: '' - operationId: post-register + summary: 'Registers a user into gamenight.' + operationId: post-user requestBody: $ref: '#/components/requestBodies/RegisterRequest' responses: @@ -61,18 +62,23 @@ paths: '422': $ref: '#/components/responses/FailureResponse' description: 'Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match.' - parameters: [] + parameters: [ ] security: - - JWT-Auth: [] + - JWT-Auth: [ ] + /user/{userId}: get: description: 'Get a user from primary id' - requestBody: - $ref: '#/components/requestBodies/GetUserRequest' - parameters: [] + parameters: + - in: path + name: userId + schema: + type: string + required: true + description: Uuid of user to get responses: '200': $ref: '#/components/responses/UserResponse' - '401': + '401': $ref: '#/components/responses/FailureResponse' '404': $ref: '#/components/responses/FailureResponse' @@ -80,6 +86,25 @@ paths: $ref: '#/components/responses/FailureResponse' security: - JWT-Auth: [] + /user/{userId}/owned_games: + get: + summary: Get owned games of user + parameters: + - in: path + name: userId + schema: + type: string + required: true + description: Uuid of user to get owned games for. + responses: + '200': + $ref: '#/components/responses/OwnedGamesResponse' + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' + security: + - JWT-Auth: [ ] /gamenights: get: summary: Get a all gamenights @@ -94,9 +119,51 @@ paths: security: - JWT-Auth: [] description: Retrieve the list of gamenights on this gamenight server. Requires authorization. - /participants: + post: + summary: 'Gets the gamenight' + operationId: post-gamenight + responses: + '200': + description: OK + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' + security: + - JWT-Auth: [ ] + requestBody: + $ref: '#/components/requestBodies/AddGamenight' + description: 'Add a gamenight by providing a name and a date, only available when providing an JWT token.' + /gamenight/{gamenightId}: + get: + summary: '' + parameters: + - in: path + name: gamenightId + schema: + type: string + required: true + description: Uuid of gamenight to get. + operationId: get-gamenight + responses: + '200': + $ref: '#/components/responses/GamenightResponse' + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' + security: + - JWT-Auth: [] + /gamenight/{gamenightId}/participants: get: summary: Get all participants for a gamenight + parameters: + - in: path + name: gamenightId + schema: + type: string + required: true + description: Uuid of gamenight to get participants for. responses: '200': $ref: '#/components/responses/ParticipantsResponse' @@ -107,40 +174,17 @@ paths: requestBody: $ref: '#/components/requestBodies/GetParticipants' security: - - JWT-Auth: [] + - JWT-Auth: [ ] description: Retrieve the participants of a single gamenight by id. - /gamenight: - post: - summary: '' - operationId: post-gamenight - responses: - '200': - description: OK - '401': - $ref: '#/components/responses/FailureResponse' - '422': - $ref: '#/components/responses/FailureResponse' - security: - - JWT-Auth: [] - requestBody: - $ref: '#/components/requestBodies/AddGamenight' - description: 'Add a gamenight by providing a name and a date, only available when providing an JWT token.' - get: - summary: '' - operationId: get-gamenight - responses: - '200': - $ref: '#/components/responses/GamenightResponse' - '401': - $ref: '#/components/responses/FailureResponse' - '422': - $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/GetGamenight' - security: - - JWT-Auth: [] - /join: post: + summary: Add a participant + parameters: + - in: path + name: gamenightId + schema: + type: string + required: true + description: Uuid of gamenight to add participants for. responses: '200': description: OK @@ -149,11 +193,24 @@ paths: '422': $ref: '#/components/responses/FailureResponse' requestBody: - $ref: '#/components/requestBodies/JoinGamenight' + $ref: '#/components/requestBodies/UserIdRequestBody' security: - JWT-Auth: [] - /leave: - post: + /gamenight/{gamenightId}/participant/{userId}: + delete: + parameters: + - in: path + name: gamenightId + schema: + type: string + required: true + description: Uuid of gamenight to delete participant for + - in: path + name: userId + schema: + type: string + required: true + description: Uuid of the of the participant to remove responses: '200': description: "OK" @@ -164,7 +221,7 @@ paths: requestBody: $ref: '#/components/requestBodies/LeaveGamenight' security: - - JWT-Auth: [] + - JWT-Auth: [ ] /games: get: responses: @@ -176,21 +233,8 @@ paths: $ref: '#/components/responses/FailureResponse' security: - JWT-Auth: [] - /game: - get: - responses: - '200': - $ref: '#/components/responses/GameResponse' - '401': - $ref: '#/components/responses/FailureResponse' - '422': - $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/GetGameRequest' - security: - - JWT-Auth: [] post: - responses: + responses: '200': $ref: '#/components/responses/GameIdResponse' '401': @@ -199,9 +243,36 @@ paths: $ref: '#/components/responses/FailureResponse' requestBody: $ref: '#/components/requestBodies/AddGameRequest' + security: + - JWT-Auth: [ ] + /game/{gameId}: + get: + summary: Get this specific game + parameters: + - in: path + name: gameId + schema: + type: string + required: true + description: Uuid of game to get. + responses: + '200': + $ref: '#/components/responses/GameResponse' + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' security: - JWT-Auth: [] delete: + summary: Delete this game. + parameters: + - in: path + name: gameId + schema: + type: string + required: true + description: Uuid of game to delete. responses: '200': description: "Ok" @@ -213,8 +284,15 @@ paths: $ref: '#/components/requestBodies/RemoveGameRequest' security: - JWT-Auth: [ ] - /rename_game: - post: + put: + summary: Changes this game resource + parameters: + - in: path + name: gameId + schema: + type: string + required: true + description: Uuid of game to change. responses: '200': description: "OK" @@ -223,11 +301,46 @@ paths: '422': $ref: '#/components/responses/FailureResponse' requestBody: - $ref: '#/components/requestBodies/RenameGameRequest' + $ref: '#/components/requestBodies/EditGameRequest' security: - JWT-Auth: [] - /own: + /game/{gameId}/owners: post: + summary: Own this game + parameters: + - in: path + name: gameId + schema: + type: string + required: true + description: Uuid of game to own. + requestBody: + $ref: '#/components/requestBodies/OwnGameRequestBody' + responses: + '200': + description: "OK" + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' + security: + - JWT-Auth: [] + /game/{gameId}/owner/{userId}: + delete: + summary: Own this game + parameters: + - in: path + name: gameId + schema: + type: string + required: true + description: Uuid of game that user no longer owns. + - in: path + name: userId + schema: + type: string + required: true + description: Uuid of user that no longer owns. responses: '200': description: "OK" @@ -235,59 +348,6 @@ paths: $ref: '#/components/responses/FailureResponse' '422': $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/OwnGameRequest' - security: - - JWT-Auth: [] - /disown: - post: - responses: - '200': - description: "OK" - '401': - $ref: '#/components/responses/FailureResponse' - '422': - $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/DisownGameRequest' - security: - - JWT-Auth: [] - /owned_games: - get: - responses: - '200': - $ref: "#/components/responses/GameIdsResponse" - '401': - $ref: '#/components/responses/FailureResponse' - '422': - $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/OwnedGamesRequest' - security: - - JWT-Auth: [] - /location: - get: - responses: - '200': - $ref: '#/components/responses/LocationResponse' - '401': - $ref: '#/components/responses/FailureResponse' - '422': - $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/GetLocationRequest' - security: - - JWT-Auth: [] - post: - responses: - '200': - $ref: '#/components/responses/LocationIdResponse' - '401': - $ref: '#/components/responses/FailureResponse' - '422': - $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/AddLocationRequest' security: - JWT-Auth: [] /locations: @@ -300,9 +360,66 @@ paths: '422': $ref: '#/components/responses/FailureResponse' security: - - JWT-Auth: [] - /location_authorize: + - JWT-Auth: [ ] post: + responses: + '200': + $ref: '#/components/responses/LocationIdResponse' + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' + requestBody: + $ref: '#/components/requestBodies/AddLocationRequest' + security: + - JWT-Auth: [ ] + /location/{locationId}: + get: + summary: gets this location + parameters: + - in: path + name: locationId + schema: + type: string + required: true + description: Uuid of location to get. + responses: + '200': + $ref: '#/components/responses/LocationResponse' + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' + security: + - JWT-Auth: [] + /location/{locationId}/authorized_users/: + get: + summary: gets this locations authorized users + parameters: + - in: path + name: locationId + schema: + type: string + required: true + description: Uuid of location to get authorized users for. + responses: + '200': + $ref: "#/components/responses/UserIdsResponse" + '401': + $ref: '#/components/responses/FailureResponse' + '422': + $ref: '#/components/responses/FailureResponse' + security: + - JWT-Auth: [ ] + post: + summary: Authorize a user + parameters: + - in: path + name: locationId + schema: + type: string + required: true + description: Uuid location to authorize for. responses: '200': description: 'Ok' @@ -311,22 +428,34 @@ paths: '422': $ref: '#/components/responses/FailureResponse' requestBody: - $ref: '#/components/requestBodies/AuthorizeLocationRequest' + $ref: '#/components/requestBodies/UserIdRequestBody' security: - JWT-Auth: [] - /authorized_location_user_ids: - get: - responses: + /location/{locationId}/authorized_user/{userId}: + delete: + parameters: + - in: path + name: locationId + schema: + type: string + required: true + description: Uuid of location to deauthorize for. + - in: path + name: userId + schema: + type: string + required: true + description: Uuid of user ot deauthorize. + responses: '200': - $ref: "#/components/responses/UserIdsResponse" + description: 'Ok' '401': $ref: '#/components/responses/FailureResponse' '422': $ref: '#/components/responses/FailureResponse' - requestBody: - $ref: '#/components/requestBodies/AuthorizedLocationUserIdsRequest' security: - - JWT-Auth: [] + - JWT-Auth: [ ] + components: schemas: Gamenight: @@ -410,15 +539,28 @@ components: type: string required: - user_id + OwnGame: + title: OwnGame + type: object + properties: + user_id: + type: string + location_id: + type: string + required: + - user_id OwnedGame: title: OwnedGame type: object properties: + user_id: + type: string game_id: type: string location_id: type: string required: + - user_id - game_id LocationId: title: LocationId @@ -455,11 +597,6 @@ components: type: string required: - game_id - GetGamenightRequestBody: - type: object - properties: - id: - type: string User: type: object properties: @@ -489,7 +626,7 @@ components: type: string required: - name - RenameGameRequestBody: + EditGameRequestBody: type: object properties: id: @@ -499,19 +636,10 @@ components: required: - id - name - OwnGameRequestBody: - type: object - properties: - game_id: - type: string - location_id: - type: string - required: - - game_id GameIdsResponse: type: array items: - $ref: "#/components/schemas/OwnedGame" + $ref: "#/components/schemas/GameId" UserIdsResponse: type: array items: @@ -541,21 +669,17 @@ components: required: - id - name - AuthorizeLocationRequestBody: - type: object - properties: - location_id: - type: string - user_id: - type: string - op: - type: string - enum: [grant, revoke] - required: - - location_id - - user_id - - op requestBodies: + UserIdRequestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserId' + OwnGameRequestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OwnGame' LoginRequest: content: application/json: @@ -566,21 +690,11 @@ components: application/json: schema: $ref: '#/components/schemas/Registration' - GetUserRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/UserId' AddGamenight: content: application/json: schema: $ref: '#/components/schemas/AddGamenightRequestBody' - GetGamenight: - content: - application/json: - schema: - $ref: '#/components/schemas/GetGamenightRequestBody' GetParticipants: content: application/json: @@ -596,61 +710,26 @@ components: application/json: schema: $ref: '#/components/schemas/GamenightId' - GetGameRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/GameId' AddGameRequest: content: application/json: schema: $ref: '#/components/schemas/AddGameRequestBody' - RenameGameRequest: + EditGameRequest: content: application/json: schema: - $ref: '#/components/schemas/RenameGameRequestBody' + $ref: '#/components/schemas/EditGameRequestBody' RemoveGameRequest: content: application/json: schema: $ref: '#/components/schemas/GameId' - OwnGameRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/OwnGameRequestBody' - DisownGameRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/GameId' - OwnedGamesRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/UserId' - GetLocationRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/LocationId' AddLocationRequest: content: application/json: schema: $ref: '#/components/schemas/AddLocationRequestBody' - AuthorizeLocationRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/AuthorizeLocationRequestBody' - AuthorizedLocationUserIdsRequest: - content: - application/json: - schema: - $ref: '#/components/schemas/LocationId' responses: TokenResponse: @@ -743,7 +822,6 @@ components: application/json: schema: $ref: '#/components/schemas/LocationId' - LocationsResponse: description: A list of all LocationsResponse content: @@ -752,6 +830,14 @@ components: type: array items: $ref: '#/components/schemas/Location' + OwnedGamesResponse: + description: A list of OwnedGames + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/OwnedGame' securitySchemes: JWT-Auth: diff --git a/backend-actix/src/main.rs b/backend-actix/src/main.rs index 4da5319..5b1c3d0 100644 --- a/backend-actix/src/main.rs +++ b/backend-actix/src/main.rs @@ -8,8 +8,8 @@ use actix_web::middleware::Logger; use actix_web::web; use actix_web::App; use actix_web::HttpServer; -use gamenight_database::*; -use request::{gamenights, login, register, *}; +use gamenight_database::{get_connection_pool, run_migration, GetConnection}; +use request::*; use tracing_actix_web::TracingLogger; #[actix_web::main] @@ -37,30 +37,30 @@ async fn main() -> std::io::Result<()> { .wrap(Logger::default()) .wrap(TracingLogger::default()) .app_data(web::Data::new(pool.clone())) - .service(login) - .service(refresh) - .service(register) - .service(gamenights) - .service(gamenight_post) - .service(gamenight_get) - .service(get_user) - .service(get_users) - .service(get_user_unauthenticated) - .service(post_join_gamenight) - .service(post_leave_gamenight) - .service(get_get_participants) - .service(get_games) - .service(get_game) - .service(post_game) - .service(post_rename_game) - .service(post_own_game) - .service(post_disown_game) - .service(get_owned_games) - .service(delete_game) - .service(get_locations) - .service(post_location) - .service(post_location_authorize) - .service(get_authorized_location_user_ids) + .service(token::post_token) + .service(token::post_refresh_token) + .service(users::get_users) + .service(users::post_users) + .service(user::get_user) + .service(user_owned_games::get_user_owned_games) + .service(gamenights::get_gamenights) + .service(gamenights::post_gamenights) + .service(gamenight::get_gamenight) + .service(gamenight_participants::get_gamenight_participants) + .service(gamenight_participants::post_gamenight_participants) + .service(gamenight_participant::delete_gamenight_participant) + .service(games::get_games) + .service(games::post_games) + .service(game::get_game) + .service(game::delete_game) + .service(game::put_game) + .service(game_owners::post_game_owners) + .service(game_owner::delete_game_owner) + .service(locations::get_locations) + .service(locations::post_locations) + .service(location_authorized_users::get_location_authorized_users) + .service(location_authorized_users::post_location_authorized_users) + .service(location_authorized_user::delete_location_authorized_user) }) .bind(("::1", 8080))? .run() diff --git a/backend-actix/src/request/game.rs b/backend-actix/src/request/game.rs index ddf814c..f57d69e 100644 --- a/backend-actix/src/request/game.rs +++ b/backend-actix/src/request/game.rs @@ -1,60 +1,24 @@ -use gamenight_database::owned_game::OwnedGame; -use crate::game::rename_game; -use crate::owned_game::own_game; -use crate::owned_game::owned_games; -use crate::owned_game::disown_game; -use gamenight_database::game::load_game; -use crate::game::insert_game; -use uuid::Uuid; -use crate::game::remove_game; -use actix_web::{delete, get, http::header::ContentType, post, web, HttpResponse, Responder}; +use actix_web::{delete, get, http::header::ContentType, put, web, HttpResponse, Responder}; +use gamenight_database::game::{load_game, remove_game, rename_game}; use gamenight_database::{ user::Role, DbPool, GetConnection, }; +use uuid::Uuid; -use crate::{models, models::{ - add_game_request_body::AddGameRequestBody, game::Game, game_id::GameId, - rename_game_request_body::RenameGameRequestBody, own_game_request_body::OwnGameRequestBody +use crate::{models::{ + edit_game_request_body::EditGameRequestBody, game::Game + , }, request::{authorization::AuthUser, error::ApiError}}; -#[get("/games")] -pub async fn get_games( - pool: web::Data, - _user: AuthUser, -) -> Result { - let mut conn = pool.get_conn(); - let games: Vec = gamenight_database::games(&mut conn)?; - let model: Vec = games - .iter() - .map(|x| Game { - id: x.id.to_string(), - name: x.name.clone(), - }) - .collect(); - - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&model)?)) -} - -impl From for gamenight_database::game::Game { - fn from(value: AddGameRequestBody) -> Self { - Self { - id: Uuid::new_v4(), - name: value.name, - } - } -} - -#[get("/game")] +#[get("/game/{game_id}")] pub async fn get_game( pool: web::Data, _user: AuthUser, - game_id: web::Json, + game_id: web::Path ) -> Result { let mut conn = pool.get_conn(); - let db_game = load_game(&mut conn, Uuid::parse_str(&game_id.0.game_id)?)?; + let db_game = load_game(&mut conn, game_id.into_inner())?; let model = Game { id: db_game.id.to_string(), @@ -66,106 +30,35 @@ pub async fn get_game( .body(serde_json::to_string(&model)?)) } -#[post("/game")] -pub async fn post_game( - pool: web::Data, - _user: AuthUser, - game_data: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - let game = game_data.0.into(); - insert_game(&mut conn, &game)?; - - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&GameId{game_id: game.id.to_string()})?)) -} - -#[delete("/game")] +#[delete("/game/{game_id}")] pub async fn delete_game( pool: web::Data, user: AuthUser, - game_id: web::Json, + game_id: web::Path, ) -> Result { if user.0.role != Role::Admin { Ok(HttpResponse::Unauthorized()) } else { let mut conn = pool.get_conn(); - remove_game(&mut conn, Uuid::parse_str(&game_id.0.game_id)?)?; + remove_game(&mut conn, game_id.into_inner())?; Ok(HttpResponse::Ok()) } } -#[post("/rename_game")] -pub async fn post_rename_game( +#[put("/game/{gameId}")] +pub async fn put_game( pool: web::Data, _user: AuthUser, - game_data: web::Json, + game_id: web::Path, + edit_data: web::Json, ) -> Result { let mut conn = pool.get_conn(); rename_game( &mut conn, - Uuid::parse_str(&game_data.0.id)?, - game_data.0.name, + game_id.into_inner(), + edit_data.name.clone(), )?; Ok(HttpResponse::Ok()) } - -#[post("/own")] -pub async fn post_own_game( - pool: web::Data, - user: AuthUser, - own_data: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - own_game( - &mut conn, - OwnedGame { - user_id: user.0.id, - game_id: Uuid::parse_str(&own_data.game_id)?, - location_id: own_data.location_id.clone().map(|x| Uuid::parse_str(&x).unwrap()), - }, - )?; - - Ok(HttpResponse::Ok()) -} - -#[post("/disown")] -pub async fn post_disown_game( - pool: web::Data, - user: AuthUser, - game_id: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - disown_game( - &mut conn, - OwnedGame { - user_id: user.0.id, - game_id: Uuid::parse_str(&game_id.0.game_id)?, - location_id: None - }, - )?; - - Ok(HttpResponse::Ok()) -} - -#[get("/owned_games")] -pub async fn get_owned_games( - pool: web::Data, - user: AuthUser, -) -> Result { - let mut conn = pool.get_conn(); - let game_ids = owned_games(&mut conn, user.0.id)?; - - - let model = game_ids.iter().map(|(u, l)| models::owned_game::OwnedGame { - game_id: u.to_string(), - location_id: l.map(|x| x.to_string()) - }).collect::>(); - - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&model)?)) -} diff --git a/backend-actix/src/request/game_owner.rs b/backend-actix/src/request/game_owner.rs new file mode 100644 index 0000000..e666819 --- /dev/null +++ b/backend-actix/src/request/game_owner.rs @@ -0,0 +1,26 @@ +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; +use actix_web::{delete, web, HttpResponse, Responder}; +use gamenight_database::owned_game::{disown_game, OwnedGame}; +use gamenight_database::{DbPool, GetConnection}; +use uuid::Uuid; + +#[delete("/game/{gameId}/owner/{ownerId}")] +pub async fn delete_game_owner( + pool: web::Data, + _user: AuthUser, + game_id: web::Path, + owner_id: web::Path, +) -> Result { + let mut conn = pool.get_conn(); + disown_game( + &mut conn, + OwnedGame { + user_id: owner_id.into_inner(), + game_id: game_id.into_inner(), + location_id: None + }, + )?; + + Ok(HttpResponse::Ok()) +} \ No newline at end of file diff --git a/backend-actix/src/request/game_owners.rs b/backend-actix/src/request/game_owners.rs new file mode 100644 index 0000000..27cdb55 --- /dev/null +++ b/backend-actix/src/request/game_owners.rs @@ -0,0 +1,27 @@ +use actix_web::{post, web, HttpResponse, Responder}; +use gamenight_database::{DbPool, GetConnection}; +use gamenight_database::owned_game::{own_game, OwnedGame}; +use uuid::Uuid; +use crate::models::game_id::GameId; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; + +#[post("/game/{gameId}/owned_games")] +pub async fn post_game_owners( + pool: web::Data, + _user: AuthUser, + game_id: web::Path, + own_data: web::Json, +) -> Result { + let mut conn = pool.get_conn(); + own_game( + &mut conn, + OwnedGame { + user_id: own_data.user_id, + game_id: Uuid::parse_str(&game_id.game_id)?, + location_id: own_data.location_id, + }, + )?; + + Ok(HttpResponse::Ok()) +} \ No newline at end of file diff --git a/backend-actix/src/request/gamenight.rs b/backend-actix/src/request/gamenight.rs new file mode 100644 index 0000000..b4d89ad --- /dev/null +++ b/backend-actix/src/request/gamenight.rs @@ -0,0 +1,32 @@ +use actix_web::{get, http::header::ContentType, web, HttpResponse, Responder}; +use uuid::Uuid; + +use gamenight_database::{gamenight, DbPool, GetConnection}; + +use crate::models::gamenight_id::GamenightId; +use crate::request::error::ApiError; +use crate::{ + models::gamenight::Gamenight, + request::authorization::AuthUser, +}; + +#[get("/gamenight/{gamenightId}")] +pub async fn get_gamenight( + pool: web::Data, + _user: AuthUser, + path: web::Path +) -> Result { + let mut conn = pool.get_conn(); + let gamenight = gamenight::get_gamenight(&mut conn, Uuid::parse_str(&path.gamenight_id)?)?; + let model = Gamenight { + id: gamenight.id.to_string(), + datetime: gamenight.datetime.to_rfc3339(), + location_id: gamenight.location_id.map(|x| x.to_string()), + name: gamenight.name, + owner_id: gamenight.owner_id.to_string(), + }; + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&model)?)) +} diff --git a/backend-actix/src/request/gamenight_participant.rs b/backend-actix/src/request/gamenight_participant.rs new file mode 100644 index 0000000..5e064ce --- /dev/null +++ b/backend-actix/src/request/gamenight_participant.rs @@ -0,0 +1,28 @@ +use actix_web::{delete, web, HttpResponse, Responder}; +use gamenight_database::{DbPool, GetConnection}; +use gamenight_database::gamenight_participants::GamenightParticipant; +use uuid::Uuid; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; + +#[delete("/gamenight/{gamenightId}/participant/{userId}")] +pub async fn delete_gamenight_participant( + pool: web::Data, + _user: AuthUser, + gamenight_id: web::Path, + user_id: web::Path +) -> Result { + web::block(move || -> Result { + let mut conn = pool.get_conn(); + let participant = GamenightParticipant { + gamenight_id: gamenight_id.into_inner(), + user_id: user_id.into_inner(), + }; + let x = gamenight_database::gamenight_participants::delete_gamenight_participant(&mut conn, participant)?; + + Ok(x) + }) + .await??; + + Ok(HttpResponse::Ok()) +} \ No newline at end of file diff --git a/backend-actix/src/request/gamenight_participants.rs b/backend-actix/src/request/gamenight_participants.rs new file mode 100644 index 0000000..e777792 --- /dev/null +++ b/backend-actix/src/request/gamenight_participants.rs @@ -0,0 +1,54 @@ +use crate::models::participants::Participants; +use crate::models::user_id::UserId; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; +use actix_web::http::header::ContentType; +use actix_web::{get, post, web, HttpResponse, Responder}; +use gamenight_database::gamenight_participants::{insert_gamenight_participant, GamenightParticipant}; +use gamenight_database::{DbPool, GetConnection}; +use uuid::Uuid; + +#[get("/gamenight/{gamenightId}/participants")] +pub async fn get_gamenight_participants( + pool: web::Data, + _user: AuthUser, + gamenight_id: web::Path +) -> Result { + let mut conn = pool.get_conn(); + + let users = gamenight_database::get_participants( + &mut conn, + &gamenight_id.into_inner(), + )? + .iter() + .map(|x| x.to_string()) + .collect(); + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&Participants { + participants: users, + })?)) +} + +#[post("/gamenight/{gamenightId}/participants")] +pub async fn post_gamenight_participants( + pool: web::Data, + _user: AuthUser, + gamenight_id: web::Path, + user_id: web::Json, +) -> Result { + web::block(move || -> Result { + let mut conn = pool.get_conn(); + Ok(insert_gamenight_participant( + &mut conn, + GamenightParticipant { + gamenight_id: gamenight_id.into_inner(), + user_id: Uuid::parse_str(&user_id.user_id)?, + }, + )?) + }) + .await??; + + Ok(HttpResponse::Ok()) +} \ No newline at end of file diff --git a/backend-actix/src/request/gamenight_handlers.rs b/backend-actix/src/request/gamenights.rs similarity index 55% rename from backend-actix/src/request/gamenight_handlers.rs rename to backend-actix/src/request/gamenights.rs index 4540a43..66054f1 100644 --- a/backend-actix/src/request/gamenight_handlers.rs +++ b/backend-actix/src/request/gamenights.rs @@ -1,17 +1,12 @@ -use actix_web::{get, http::header::ContentType, post, web, HttpResponse, Responder}; +use actix_web::{get, post, web, HttpResponse, Responder}; +use actix_web::http::header::ContentType; use chrono::{DateTime, ParseError}; -use uuid::Uuid; - use gamenight_database::{gamenight, DbPool, GetConnection}; - +use uuid::Uuid; +use crate::models::add_gamenight_request_body::AddGamenightRequestBody; +use crate::models::gamenight::Gamenight; +use crate::request::authorization::AuthUser; use crate::request::error::ApiError; -use crate::{ - models::{ - add_gamenight_request_body::AddGamenightRequestBody, gamenight::Gamenight, - get_gamenight_request_body::GetGamenightRequestBody, - }, - request::authorization::AuthUser, -}; impl AddGamenightRequestBody { pub fn into_with_user(&self, user: AuthUser) -> Result { @@ -25,14 +20,8 @@ impl AddGamenightRequestBody { } } -impl From for Uuid { - fn from(value: GetGamenightRequestBody) -> Self { - Uuid::parse_str(value.id.unwrap().as_str()).unwrap() - } -} - #[get("/gamenights")] -pub async fn gamenights( +pub async fn get_gamenights( pool: web::Data, _user: AuthUser, ) -> Result { @@ -54,8 +43,8 @@ pub async fn gamenights( .body(serde_json::to_string(&model)?)) } -#[post("/gamenight")] -pub async fn gamenight_post( +#[post("/gamenights")] +pub async fn post_gamenights( pool: web::Data, user: AuthUser, gamenight_data: web::Json, @@ -65,25 +54,4 @@ pub async fn gamenight_post( gamenight::add_gamenight(&mut conn, gamenight_data.into_with_user(user)?)?; Ok(HttpResponse::Ok()) -} - -#[get("/gamenight")] -pub async fn gamenight_get( - pool: web::Data, - _user: AuthUser, - gamenight_data: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - let gamenight = gamenight::get_gamenight(&mut conn, gamenight_data.into_inner().into())?; - let model = Gamenight { - id: gamenight.id.to_string(), - datetime: gamenight.datetime.to_rfc3339(), - location_id: gamenight.location_id.map(|x| x.to_string()), - name: gamenight.name, - owner_id: gamenight.owner_id.to_string(), - }; - - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&model)?)) -} +} \ No newline at end of file diff --git a/backend-actix/src/request/games.rs b/backend-actix/src/request/games.rs new file mode 100644 index 0000000..9e20d81 --- /dev/null +++ b/backend-actix/src/request/games.rs @@ -0,0 +1,54 @@ +use actix_web::{get, post, web, HttpResponse, Responder}; +use actix_web::http::header::ContentType; +use gamenight_database::{DbPool, GetConnection}; +use gamenight_database::game::insert_game; +use uuid::Uuid; +use crate::models::add_game_request_body::AddGameRequestBody; +use crate::models::game::Game; +use crate::models::game_id::GameId; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; + +impl From for gamenight_database::game::Game { + fn from(value: AddGameRequestBody) -> Self { + Self { + id: Uuid::new_v4(), + name: value.name, + } + } +} + +#[get("/games")] +pub async fn get_games( + pool: web::Data, + _user: AuthUser, +) -> Result { + let mut conn = pool.get_conn(); + let games: Vec = gamenight_database::games(&mut conn)?; + let model: Vec = games + .iter() + .map(|x| Game { + id: x.id.to_string(), + name: x.name.clone(), + }) + .collect(); + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&model)?)) +} + +#[post("/games")] +pub async fn post_games( + pool: web::Data, + _user: AuthUser, + game_data: web::Json, +) -> Result { + let mut conn = pool.get_conn(); + let game = game_data.0.into(); + insert_game(&mut conn, &game)?; + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&GameId{game_id: game.id.to_string()})?)) +} \ No newline at end of file diff --git a/backend-actix/src/request/join_gamenight.rs b/backend-actix/src/request/join_gamenight.rs deleted file mode 100644 index 922919a..0000000 --- a/backend-actix/src/request/join_gamenight.rs +++ /dev/null @@ -1,55 +0,0 @@ -use actix_web::{post, web, HttpResponse, Responder}; -use gamenight_database::{ - gamenight_participants::{ - delete_gamenight_participant, insert_gamenight_participant, GamenightParticipant, - }, - DbPool, GetConnection, -}; -use uuid::Uuid; - -use crate::{ - models::gamenight_id::GamenightId, - request::{authorization::AuthUser, error::ApiError}, -}; - -#[post("/join")] -pub async fn post_join_gamenight( - pool: web::Data, - user: AuthUser, - gamenight_id: web::Json, -) -> Result { - web::block(move || -> Result { - let mut conn = pool.get_conn(); - Ok(insert_gamenight_participant( - &mut conn, - GamenightParticipant { - gamenight_id: Uuid::parse_str(&gamenight_id.gamenight_id)?, - user_id: user.0.id, - }, - )?) - }) - .await??; - - Ok(HttpResponse::Ok()) -} - -#[post("/leave")] -pub async fn post_leave_gamenight( - pool: web::Data, - user: AuthUser, - gamenight_id: web::Json, -) -> Result { - web::block(move || -> Result { - let mut conn = pool.get_conn(); - let participant = GamenightParticipant { - gamenight_id: Uuid::parse_str(&gamenight_id.gamenight_id)?, - user_id: user.0.id, - }; - let x = delete_gamenight_participant(&mut conn, participant)?; - - Ok(x) - }) - .await??; - - Ok(HttpResponse::Ok()) -} diff --git a/backend-actix/src/request/location.rs b/backend-actix/src/request/location.rs index 1e3e06f..93c8a40 100644 --- a/backend-actix/src/request/location.rs +++ b/backend-actix/src/request/location.rs @@ -1,65 +1,28 @@ -use actix_web::{get, http::header::ContentType, post, web, HttpResponse, Responder}; -use gamenight_database::{ - location::{insert_location, locations}, - DbPool, GetConnection, -}; +use crate::models::location::Location; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; +use actix_web::http::header::ContentType; +use actix_web::{get, web, HttpResponse, Responder}; +use gamenight_database::{DbPool, GetConnection}; use uuid::Uuid; -use crate::{ - models::{ - add_location_request_body::AddLocationRequestBody, location::Location, - location_id::LocationId, - }, - request::{authorization::AuthUser, error::ApiError}, -}; - -impl From for gamenight_database::location::Location { - fn from(value: AddLocationRequestBody) -> Self { - Self { - id: Uuid::new_v4(), - name: value.name, - address: value.address, - note: value.note, - } - } -} - -#[get("/locations")] +#[get("/location/{locationId}")] pub async fn get_locations( pool: web::Data, _user: AuthUser, + location_id: web::Path, ) -> Result { let mut conn = pool.get_conn(); - let games: Vec = locations(&mut conn)?; - let model: Vec = games - .iter() - .map(|x| Location { - id: x.id.to_string(), - name: x.name.clone(), - address: x.address.clone(), - note: x.note.clone(), - }) - .collect(); + let location = gamenight_database::location::load_location(&mut conn, location_id.into_inner())?; - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&model)?)) -} - -#[post("/location")] -pub async fn post_location( - pool: web::Data, - _user: AuthUser, - game_data: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - let uuid = insert_location(&mut conn, game_data.0.into())?; - - let model = LocationId { - location_id: uuid.to_string(), + let model = Location { + id: location.id.to_string(), + name: location.name.clone(), + note: location.note.clone(), + address: location.address.clone(), }; Ok(HttpResponse::Ok() .content_type(ContentType::json()) .body(serde_json::to_string(&model)?)) -} +} \ No newline at end of file diff --git a/backend-actix/src/request/location_authorized_user.rs b/backend-actix/src/request/location_authorized_user.rs new file mode 100644 index 0000000..b89d090 --- /dev/null +++ b/backend-actix/src/request/location_authorized_user.rs @@ -0,0 +1,23 @@ +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; +use actix_web::{delete, web, HttpResponse, Responder}; +use gamenight_database::location_owner::{revoke_permission, LocationOwner}; +use gamenight_database::{DbPool, GetConnection}; +use uuid::Uuid; + +#[delete("/location/{location_id}/authorized_users/{user_id}")] +pub async fn delete_location_authorized_user( + pool: web::Data, + _user: AuthUser, + location_id: web::Path, + user_id: web::Path +) -> Result { + let mut conn = pool.get_conn(); + + revoke_permission(&mut conn, LocationOwner { + user_id: user_id.into_inner(), + location_id: location_id.into_inner() + })?; + + Ok(HttpResponse::Ok()) +} \ No newline at end of file diff --git a/backend-actix/src/request/location_authorized_users.rs b/backend-actix/src/request/location_authorized_users.rs new file mode 100644 index 0000000..575b152 --- /dev/null +++ b/backend-actix/src/request/location_authorized_users.rs @@ -0,0 +1,60 @@ +use actix_web::{get, post, web, HttpResponse, Responder}; +use actix_web::http::header::ContentType; +use gamenight_database::{DbPool, GetConnection}; +use gamenight_database::location_owner::{grant_permission, location_permissions, LocationOwner}; +use gamenight_database::user::Role; +use uuid::Uuid; +use crate::models::location_id::LocationId; +use crate::models::user_id::UserId; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; + +impl From for UserId { + fn from(uuid: Uuid) -> Self { + Self { + user_id: uuid.into(), + } + } +} + +#[get("/location/{locationId}/authorized_users/")] +pub async fn get_location_authorized_users( + pool: web::Data, + _user: AuthUser, + location_id: web::Path, +) -> Result { + let mut conn = pool.get_conn(); + + let permissions = + location_permissions(&mut conn, location_id.into_inner())?; + + let model: Vec = permissions.into_iter().map(Into::into).collect(); + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&model)?)) +} + +#[post("/location/{locationId}/authorized_users/")] +pub async fn post_location_authorized_users( + pool: web::Data, + user: AuthUser, + location_id1: web::Path, + user_id: web::Json, +) -> Result { + let mut conn = pool.get_conn(); + + let location_uuid = Uuid::parse_str(&location_id1.location_id)?; + let user_uuid = Uuid::parse_str(&user_id.user_id)?; + let authorized = location_permissions(&mut conn, location_uuid)?; + if user.0.role != Role::Admin && !authorized.contains(&user.0.id) { + Ok(HttpResponse::Unauthorized()) + } else { + grant_permission(&mut conn, LocationOwner { + location_id: location_uuid, + user_id: user_uuid, + })?; + + Ok(HttpResponse::Ok()) + } +} \ No newline at end of file diff --git a/backend-actix/src/request/location_owner.rs b/backend-actix/src/request/location_owner.rs deleted file mode 100644 index 550a937..0000000 --- a/backend-actix/src/request/location_owner.rs +++ /dev/null @@ -1,79 +0,0 @@ -use actix_web::{get, http::header::ContentType, post, web, HttpResponse, Responder}; -use gamenight_database::{ - location_owner::{grant_permission, location_permissions, revoke_permission, LocationOwner}, - user::Role, - DbPool, GetConnection, -}; -use uuid::Uuid; - -use crate::{ - models::{ - authorize_location_request_body::{ - AuthorizeLocationRequestBody, - Op::{Grant, Revoke}, - }, - location_id::LocationId, - user_id::UserId, - }, - request::{authorization::AuthUser, error::ApiError}, -}; - -impl<'a> TryFrom<&'a AuthorizeLocationRequestBody> for LocationOwner { - type Error = ApiError; - - fn try_from(value: &'a AuthorizeLocationRequestBody) -> Result { - Ok(LocationOwner { - location_id: Uuid::parse_str(&value.location_id)?, - user_id: Uuid::parse_str(&value.user_id)?, - }) - } -} - -#[post("/location_authorize")] -pub async fn post_location_authorize( - pool: web::Data, - user: AuthUser, - auth_data: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - - let inner_auth_data = &auth_data.into_inner(); - let location_owner: LocationOwner = inner_auth_data.try_into()?; - let authorized = location_permissions(&mut conn, location_owner.location_id)?; - if user.0.role != Role::Admin && !authorized.contains(&user.0.id) { - Ok(HttpResponse::Unauthorized()) - } else { - match inner_auth_data.op { - Grant => grant_permission(&mut conn, location_owner)?, - Revoke => revoke_permission(&mut conn, location_owner)?, - }; - - Ok(HttpResponse::Ok()) - } -} - -impl From for UserId { - fn from(value: Uuid) -> Self { - Self { - user_id: value.to_string(), - } - } -} - -#[get("/authorized_location_user_ids")] -pub async fn get_authorized_location_user_ids( - pool: web::Data, - _user: AuthUser, - location_id: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - - let permissions = - location_permissions(&mut conn, Uuid::parse_str(&location_id.0.location_id)?)?; - - let model: Vec = permissions.into_iter().map(Into::into).collect(); - - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&model)?)) -} diff --git a/backend-actix/src/request/locations.rs b/backend-actix/src/request/locations.rs new file mode 100644 index 0000000..aa21e4f --- /dev/null +++ b/backend-actix/src/request/locations.rs @@ -0,0 +1,62 @@ +use actix_web::{get, post, web, HttpResponse, Responder}; +use actix_web::http::header::ContentType; +use gamenight_database::{DbPool, GetConnection}; +use gamenight_database::location::{insert_location, locations}; +use uuid::Uuid; +use crate::models::add_location_request_body::AddLocationRequestBody; +use crate::models::location::Location; +use crate::models::location_id::LocationId; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; + +impl From for gamenight_database::location::Location { + fn from(value: AddLocationRequestBody) -> Self { + Self { + id: Uuid::new_v4(), + name: value.name, + address: value.address, + note: value.note, + } + } +} + +#[get("/locations")] +pub async fn get_locations( + pool: web::Data, + _user: AuthUser, +) -> Result { + let mut conn = pool.get_conn(); + let games: Vec = locations(&mut conn)?; + let model: Vec = games + .iter() + .map(|x| Location { + id: x.id.to_string(), + name: x.name.clone(), + address: x.address.clone(), + note: x.note.clone(), + }) + .collect(); + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&model)?)) +} + +#[post("/locations")] +pub async fn post_locations( + pool: web::Data, + _user: AuthUser, + game_data: web::Json, +) -> Result { + let mut conn = pool.get_conn(); + let uuid = insert_location(&mut conn, game_data.0.into())?; + + let model = LocationId { + location_id: uuid.to_string(), + }; + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&model)?)) +} + diff --git a/backend-actix/src/request/mod.rs b/backend-actix/src/request/mod.rs index 6ae8db0..7cdeeca 100644 --- a/backend-actix/src/request/mod.rs +++ b/backend-actix/src/request/mod.rs @@ -1,34 +1,20 @@ + mod authorization; mod error; -mod game; -mod gamenight_handlers; -mod join_gamenight; -mod location; -mod location_owner; -mod participant_handlers; -mod user_handlers; -pub use game::get_game; -pub use game::get_games; -pub use game::get_owned_games; -pub use game::post_disown_game; -pub use game::post_game; -pub use game::post_own_game; -pub use game::post_rename_game; -pub use game::delete_game; -pub use gamenight_handlers::gamenight_get; -pub use gamenight_handlers::gamenight_post; -pub use gamenight_handlers::gamenights; -pub use join_gamenight::post_join_gamenight; -pub use join_gamenight::post_leave_gamenight; -pub use location::get_locations; -pub use location::post_location; -pub use location_owner::get_authorized_location_user_ids; -pub use location_owner::post_location_authorize; -pub use participant_handlers::get_get_participants; -pub use user_handlers::get_user; -pub use user_handlers::get_user_unauthenticated; -pub use user_handlers::get_users; -pub use user_handlers::login; -pub use user_handlers::refresh; -pub use user_handlers::register; +pub mod token; +pub mod users; +pub mod user; +pub mod user_owned_games; +pub mod gamenights; +pub mod gamenight; +pub mod gamenight_participants; +pub mod gamenight_participant; +pub mod games; +pub mod game; +pub mod game_owners; +pub mod game_owner; +pub mod locations; +pub mod location; +pub mod location_authorized_users; +pub mod location_authorized_user; diff --git a/backend-actix/src/request/participant_handlers.rs b/backend-actix/src/request/participant_handlers.rs deleted file mode 100644 index a890328..0000000 --- a/backend-actix/src/request/participant_handlers.rs +++ /dev/null @@ -1,31 +0,0 @@ -use actix_web::{get, http::header::ContentType, web, HttpResponse, Responder}; -use gamenight_database::{DbPool, GetConnection}; -use uuid::Uuid; - -use crate::{ - models::{gamenight_id::GamenightId, participants::Participants}, - request::{authorization::AuthUser, error::ApiError}, -}; - -#[get("/participants")] -pub async fn get_get_participants( - pool: web::Data, - _user: AuthUser, - gamenight_info: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - - let users = gamenight_database::get_participants( - &mut conn, - &Uuid::parse_str(&gamenight_info.into_inner().gamenight_id)?, - )? - .iter() - .map(|x| x.to_string()) - .collect(); - - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&Participants { - participants: users, - })?)) -} diff --git a/backend-actix/src/request/token.rs b/backend-actix/src/request/token.rs new file mode 100644 index 0000000..e627523 --- /dev/null +++ b/backend-actix/src/request/token.rs @@ -0,0 +1,54 @@ +use crate::models::login::Login; +use crate::models::token::Token; +use crate::request::authorization::{get_token, AuthUser}; +use crate::request::error::ApiError; +use actix_web::http::header::ContentType; +use actix_web::{post, web, HttpResponse, Responder}; +use gamenight_database::{DbPool, GetConnection}; + +impl From for gamenight_database::user::LoginUser { + fn from(val: Login) -> Self { + gamenight_database::user::LoginUser { + username: val.username, + password: val.password, + } + } +} +#[post("/token")] +pub async fn post_token( + pool: web::Data, + login_data: web::Json, +) -> Result { + let data = login_data.into_inner(); + + if let Ok(Some(user)) = web::block(move || { + let mut conn = pool.get_conn(); + gamenight_database::login(&mut conn, data.into()) + }) + .await? + { + let token = get_token(&user)?; + let response = Token { + jwt_token: Some(token), + }; + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&response)?)) + } else { + Err(ApiError { + status: 401, + message: "User doesn't exist or password doesn't match".to_string(), + }) + } +} + +#[post("/refresh_token")] +pub async fn post_refresh_token(user: AuthUser) -> Result { + let new_token = get_token(&user.0)?; + let response = Token { + jwt_token: Some(new_token), + }; + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&response)?)) +} \ No newline at end of file diff --git a/backend-actix/src/request/user.rs b/backend-actix/src/request/user.rs new file mode 100644 index 0000000..5eca7a4 --- /dev/null +++ b/backend-actix/src/request/user.rs @@ -0,0 +1,37 @@ +use crate::models::user::User; +use crate::request::error::ApiError; +use actix_web::{get, http::header::ContentType, web, HttpResponse, Responder}; +use gamenight_database::{DbPool, GetConnection}; +use serde_json; +use uuid::Uuid; + +use super::authorization::AuthUser; + + +impl From for User { + fn from(value: gamenight_database::user::User) -> Self { + Self { + id: value.id.to_string(), + username: value.username, + email: None, + } + } +} + +#[get("/user/{userId}")] +pub async fn get_user( + pool: web::Data, + _user: AuthUser, + user_id: web::Path, +) -> Result { + let mut conn = pool.get_conn(); + + let user = gamenight_database::user::get_user( + &mut conn, + user_id.into_inner() + )?; + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&user)?)) +} \ No newline at end of file diff --git a/backend-actix/src/request/user_owned_games.rs b/backend-actix/src/request/user_owned_games.rs new file mode 100644 index 0000000..1141aa4 --- /dev/null +++ b/backend-actix/src/request/user_owned_games.rs @@ -0,0 +1,28 @@ +use actix_web::{get, web, HttpResponse, Responder}; +use actix_web::http::header::ContentType; +use gamenight_database::{DbPool, GetConnection}; +use gamenight_database::owned_game::owned_games; +use uuid::Uuid; +use crate::models; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; + +#[get("/user/{userId}/owned_games")] +pub async fn get_user_owned_games( + pool: web::Data, + _user: AuthUser, + user_id: web::Path +) -> Result { + let mut conn = pool.get_conn(); + let game_ids = owned_games(&mut conn, user_id.into_inner())?; + + let model = game_ids.iter().map(|(u,g , l)| models::owned_game::OwnedGame { + user_id: u.to_string(), + game_id: g.to_string(), + location_id: l.map(|x| x.to_string()) + }).collect::>(); + + Ok(HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&model)?)) +} diff --git a/backend-actix/src/request/user_handlers.rs b/backend-actix/src/request/users.rs similarity index 54% rename from backend-actix/src/request/user_handlers.rs rename to backend-actix/src/request/users.rs index 43b51cc..5700ad3 100644 --- a/backend-actix/src/request/user_handlers.rs +++ b/backend-actix/src/request/users.rs @@ -1,25 +1,13 @@ -use crate::models::{ - login::Login, registration::Registration, token::Token, user::User, user_id::UserId, -}; -use crate::request::{authorization::get_token, error::ApiError}; -use actix_web::{get, http::header::ContentType, post, web, HttpResponse, Responder}; -use gamenight_database::user::{count_users_with_email, count_users_with_username}; +use actix_web::{get, post, web, HttpResponse, Responder}; +use actix_web::http::header::ContentType; use gamenight_database::{DbPool, GetConnection}; +use gamenight_database::user::{count_users_with_email, count_users_with_username}; use serde::{Deserialize, Serialize}; -use serde_json; -use uuid::Uuid; use validator::{Validate, ValidateArgs, ValidationError}; - -use super::authorization::AuthUser; - -impl From for gamenight_database::user::LoginUser { - fn from(val: Login) -> Self { - gamenight_database::user::LoginUser { - username: val.username, - password: val.password, - } - } -} +use crate::models::registration::Registration; +use crate::models::user::User; +use crate::request::authorization::AuthUser; +use crate::request::error::ApiError; impl From for gamenight_database::user::Register { fn from(val: Registration) -> Self { @@ -35,6 +23,7 @@ pub struct RegisterContext<'v_a> { pub pool: &'v_a DbPool, } + pub fn unique_username( username: &String, context: &RegisterContext, @@ -83,100 +72,7 @@ impl From for ValidatableRegistration { } } -#[get("/token")] -pub async fn login( - pool: web::Data, - login_data: web::Json, -) -> Result { - let data = login_data.into_inner(); - - if let Ok(Some(user)) = web::block(move || { - let mut conn = pool.get_conn(); - gamenight_database::login(&mut conn, data.into()) - }) - .await? - { - let token = get_token(&user)?; - let response = Token { - jwt_token: Some(token), - }; - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&response)?)) - } else { - Err(ApiError { - status: 401, - message: "User doesn't exist or password doesn't match".to_string(), - }) - } -} - -#[post("/token")] -pub async fn refresh(user: AuthUser) -> Result { - let new_token = get_token(&user.0)?; - let response = Token { - jwt_token: Some(new_token), - }; - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&response)?)) -} - -#[post("/user")] -pub async fn register( - pool: web::Data, - register_data: web::Json, -) -> Result { - web::block(move || -> Result<(), ApiError> { - let validatable_registration: ValidatableRegistration = register_data.clone().into(); - validatable_registration.validate_with_args(&RegisterContext { pool: &pool })?; - let register_request = register_data.into_inner().into(); - let mut conn = pool.get_conn(); - gamenight_database::register(&mut conn, register_request)?; - Ok(()) - }) - .await??; - - Ok(HttpResponse::Ok()) -} - -impl From for User { - fn from(value: gamenight_database::user::User) -> Self { - Self { - id: value.id.to_string(), - username: value.username, - email: None, - } - } -} - -#[get("/user")] -pub async fn get_user( - pool: web::Data, - _user: AuthUser, - user_info: web::Json, -) -> Result { - let mut conn = pool.get_conn(); - - let user = gamenight_database::user::get_user( - &mut conn, - Uuid::parse_str(&user_info.into_inner().user_id)?, - )?; - - Ok(HttpResponse::Ok() - .content_type(ContentType::json()) - .body(serde_json::to_string(&user)?)) -} - -#[get("/user")] -pub async fn get_user_unauthenticated( - _path: web::Path, -) -> Result { - Ok(HttpResponse::Forbidden()) -} - #[get("/users")] - pub async fn get_users( pool: web::Data, _user: AuthUser, @@ -190,3 +86,21 @@ pub async fn get_users( .content_type(ContentType::json()) .body(serde_json::to_string(&model)?)) } + +#[post("/users")] +pub async fn post_users( + pool: web::Data, + register_data: web::Json, +) -> Result { + web::block(move || -> Result<(), ApiError> { + let validatable_registration: ValidatableRegistration = register_data.clone().into(); + validatable_registration.validate_with_args(&RegisterContext { pool: &pool })?; + let register_request = register_data.into_inner().into(); + let mut conn = pool.get_conn(); + gamenight_database::register(&mut conn, register_request)?; + Ok(()) + }) + .await??; + + Ok(HttpResponse::Ok()) +} diff --git a/gamenight-api-client-rs/.openapi-generator/FILES b/gamenight-api-client-rs/.openapi-generator/FILES index 0b53035..8363dbd 100644 --- a/gamenight-api-client-rs/.openapi-generator/FILES +++ b/gamenight-api-client-rs/.openapi-generator/FILES @@ -5,22 +5,20 @@ README.md docs/AddGameRequestBody.md docs/AddGamenightRequestBody.md docs/AddLocationRequestBody.md -docs/AuthorizeLocationRequestBody.md docs/DefaultApi.md +docs/EditGameRequestBody.md docs/Failure.md docs/Game.md docs/GameId.md docs/Gamenight.md docs/GamenightId.md -docs/GetGamenightRequestBody.md docs/Location.md docs/LocationId.md docs/Login.md -docs/OwnGameRequestBody.md +docs/OwnGame.md docs/OwnedGame.md docs/Participants.md docs/Registration.md -docs/RenameGameRequestBody.md docs/Token.md docs/User.md docs/UserId.md @@ -32,22 +30,20 @@ src/lib.rs src/models/add_game_request_body.rs src/models/add_gamenight_request_body.rs src/models/add_location_request_body.rs -src/models/authorize_location_request_body.rs +src/models/edit_game_request_body.rs src/models/failure.rs src/models/game.rs src/models/game_id.rs src/models/gamenight.rs src/models/gamenight_id.rs -src/models/get_gamenight_request_body.rs src/models/location.rs src/models/location_id.rs src/models/login.rs src/models/mod.rs -src/models/own_game_request_body.rs +src/models/own_game.rs src/models/owned_game.rs src/models/participants.rs src/models/registration.rs -src/models/rename_game_request_body.rs src/models/token.rs src/models/user.rs src/models/user_id.rs diff --git a/gamenight-api-client-rs/README.md b/gamenight-api-client-rs/README.md index f5f0bcb..20cb340 100644 --- a/gamenight-api-client-rs/README.md +++ b/gamenight-api-client-rs/README.md @@ -27,29 +27,30 @@ All URIs are relative to *http://localhost:8080* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*DefaultApi* | [**authorized_location_user_ids_get**](docs/DefaultApi.md#authorized_location_user_ids_get) | **GET** /authorized_location_user_ids | -*DefaultApi* | [**disown_post**](docs/DefaultApi.md#disown_post) | **POST** /disown | -*DefaultApi* | [**game_delete**](docs/DefaultApi.md#game_delete) | **DELETE** /game | -*DefaultApi* | [**game_get**](docs/DefaultApi.md#game_get) | **GET** /game | -*DefaultApi* | [**game_post**](docs/DefaultApi.md#game_post) | **POST** /game | +*DefaultApi* | [**game_game_id_delete**](docs/DefaultApi.md#game_game_id_delete) | **DELETE** /game/{gameId} | Delete this game. +*DefaultApi* | [**game_game_id_get**](docs/DefaultApi.md#game_game_id_get) | **GET** /game/{gameId} | Get this specific game +*DefaultApi* | [**game_game_id_owner_user_id_delete**](docs/DefaultApi.md#game_game_id_owner_user_id_delete) | **DELETE** /game/{gameId}/owner/{userId} | Own this game +*DefaultApi* | [**game_game_id_owners_post**](docs/DefaultApi.md#game_game_id_owners_post) | **POST** /game/{gameId}/owners | Own this game +*DefaultApi* | [**game_game_id_put**](docs/DefaultApi.md#game_game_id_put) | **PUT** /game/{gameId} | Changes this game resource +*DefaultApi* | [**gamenight_gamenight_id_participant_user_id_delete**](docs/DefaultApi.md#gamenight_gamenight_id_participant_user_id_delete) | **DELETE** /gamenight/{gamenightId}/participant/{userId} | +*DefaultApi* | [**gamenight_gamenight_id_participants_get**](docs/DefaultApi.md#gamenight_gamenight_id_participants_get) | **GET** /gamenight/{gamenightId}/participants | Get all participants for a gamenight +*DefaultApi* | [**gamenight_gamenight_id_participants_post**](docs/DefaultApi.md#gamenight_gamenight_id_participants_post) | **POST** /gamenight/{gamenightId}/participants | Add a participant *DefaultApi* | [**games_get**](docs/DefaultApi.md#games_get) | **GET** /games | +*DefaultApi* | [**games_post**](docs/DefaultApi.md#games_post) | **POST** /games | *DefaultApi* | [**get_gamenight**](docs/DefaultApi.md#get_gamenight) | **GET** /gamenight | *DefaultApi* | [**get_gamenights**](docs/DefaultApi.md#get_gamenights) | **GET** /gamenights | Get a all gamenights -*DefaultApi* | [**get_token**](docs/DefaultApi.md#get_token) | **GET** /token | -*DefaultApi* | [**join_post**](docs/DefaultApi.md#join_post) | **POST** /join | -*DefaultApi* | [**leave_post**](docs/DefaultApi.md#leave_post) | **POST** /leave | -*DefaultApi* | [**location_authorize_post**](docs/DefaultApi.md#location_authorize_post) | **POST** /location_authorize | -*DefaultApi* | [**location_get**](docs/DefaultApi.md#location_get) | **GET** /location | -*DefaultApi* | [**location_post**](docs/DefaultApi.md#location_post) | **POST** /location | +*DefaultApi* | [**location_location_id_authorized_users_get**](docs/DefaultApi.md#location_location_id_authorized_users_get) | **GET** /location/{locationId}/authorized_users/ | gets this locations authorized users +*DefaultApi* | [**location_location_id_authorized_users_post**](docs/DefaultApi.md#location_location_id_authorized_users_post) | **POST** /location/{locationId}/authorized_users/ | Authorize a user +*DefaultApi* | [**location_location_id_authorized_users_user_id_delete**](docs/DefaultApi.md#location_location_id_authorized_users_user_id_delete) | **DELETE** /location/{locationId}/authorized_users/{userId} | +*DefaultApi* | [**location_location_id_get**](docs/DefaultApi.md#location_location_id_get) | **GET** /location/{locationId} | gets this location *DefaultApi* | [**locations_get**](docs/DefaultApi.md#locations_get) | **GET** /locations | -*DefaultApi* | [**own_post**](docs/DefaultApi.md#own_post) | **POST** /own | -*DefaultApi* | [**owned_games_get**](docs/DefaultApi.md#owned_games_get) | **GET** /owned_games | -*DefaultApi* | [**participants_get**](docs/DefaultApi.md#participants_get) | **GET** /participants | Get all participants for a gamenight -*DefaultApi* | [**post_gamenight**](docs/DefaultApi.md#post_gamenight) | **POST** /gamenight | -*DefaultApi* | [**post_register**](docs/DefaultApi.md#post_register) | **POST** /user | -*DefaultApi* | [**post_token**](docs/DefaultApi.md#post_token) | **POST** /token | -*DefaultApi* | [**rename_game_post**](docs/DefaultApi.md#rename_game_post) | **POST** /rename_game | -*DefaultApi* | [**user_get**](docs/DefaultApi.md#user_get) | **GET** /user | +*DefaultApi* | [**locations_post**](docs/DefaultApi.md#locations_post) | **POST** /locations | +*DefaultApi* | [**post_gamenight**](docs/DefaultApi.md#post_gamenight) | **POST** /gamenights | +*DefaultApi* | [**post_refresh_tokenz**](docs/DefaultApi.md#post_refresh_tokenz) | **POST** /refresh_token | Refresh a user token +*DefaultApi* | [**post_token**](docs/DefaultApi.md#post_token) | **POST** /token | Login a user. +*DefaultApi* | [**post_user**](docs/DefaultApi.md#post_user) | **POST** /users | Registers a user into gamenight. +*DefaultApi* | [**user_user_id_get**](docs/DefaultApi.md#user_user_id_get) | **GET** /user/{userId} | +*DefaultApi* | [**user_user_id_owned_games_get**](docs/DefaultApi.md#user_user_id_owned_games_get) | **GET** /user/{userId}/owned_games | Get owned games of user *DefaultApi* | [**users_get**](docs/DefaultApi.md#users_get) | **GET** /users | @@ -58,21 +59,19 @@ Class | Method | HTTP request | Description - [AddGameRequestBody](docs/AddGameRequestBody.md) - [AddGamenightRequestBody](docs/AddGamenightRequestBody.md) - [AddLocationRequestBody](docs/AddLocationRequestBody.md) - - [AuthorizeLocationRequestBody](docs/AuthorizeLocationRequestBody.md) + - [EditGameRequestBody](docs/EditGameRequestBody.md) - [Failure](docs/Failure.md) - [Game](docs/Game.md) - [GameId](docs/GameId.md) - [Gamenight](docs/Gamenight.md) - [GamenightId](docs/GamenightId.md) - - [GetGamenightRequestBody](docs/GetGamenightRequestBody.md) - [Location](docs/Location.md) - [LocationId](docs/LocationId.md) - [Login](docs/Login.md) - - [OwnGameRequestBody](docs/OwnGameRequestBody.md) + - [OwnGame](docs/OwnGame.md) - [OwnedGame](docs/OwnedGame.md) - [Participants](docs/Participants.md) - [Registration](docs/Registration.md) - - [RenameGameRequestBody](docs/RenameGameRequestBody.md) - [Token](docs/Token.md) - [User](docs/User.md) - [UserId](docs/UserId.md) diff --git a/gamenight-api-client-rs/docs/DefaultApi.md b/gamenight-api-client-rs/docs/DefaultApi.md index a23c781..ab8f989 100644 --- a/gamenight-api-client-rs/docs/DefaultApi.md +++ b/gamenight-api-client-rs/docs/DefaultApi.md @@ -4,72 +4,46 @@ All URIs are relative to *http://localhost:8080* Method | HTTP request | Description ------------- | ------------- | ------------- -[**authorized_location_user_ids_get**](DefaultApi.md#authorized_location_user_ids_get) | **GET** /authorized_location_user_ids | -[**disown_post**](DefaultApi.md#disown_post) | **POST** /disown | -[**game_delete**](DefaultApi.md#game_delete) | **DELETE** /game | -[**game_get**](DefaultApi.md#game_get) | **GET** /game | -[**game_post**](DefaultApi.md#game_post) | **POST** /game | +[**game_game_id_delete**](DefaultApi.md#game_game_id_delete) | **DELETE** /game/{gameId} | Delete this game. +[**game_game_id_get**](DefaultApi.md#game_game_id_get) | **GET** /game/{gameId} | Get this specific game +[**game_game_id_owner_user_id_delete**](DefaultApi.md#game_game_id_owner_user_id_delete) | **DELETE** /game/{gameId}/owner/{userId} | Own this game +[**game_game_id_owners_post**](DefaultApi.md#game_game_id_owners_post) | **POST** /game/{gameId}/owners | Own this game +[**game_game_id_put**](DefaultApi.md#game_game_id_put) | **PUT** /game/{gameId} | Changes this game resource +[**gamenight_gamenight_id_participant_user_id_delete**](DefaultApi.md#gamenight_gamenight_id_participant_user_id_delete) | **DELETE** /gamenight/{gamenightId}/participant/{userId} | +[**gamenight_gamenight_id_participants_get**](DefaultApi.md#gamenight_gamenight_id_participants_get) | **GET** /gamenight/{gamenightId}/participants | Get all participants for a gamenight +[**gamenight_gamenight_id_participants_post**](DefaultApi.md#gamenight_gamenight_id_participants_post) | **POST** /gamenight/{gamenightId}/participants | Add a participant [**games_get**](DefaultApi.md#games_get) | **GET** /games | +[**games_post**](DefaultApi.md#games_post) | **POST** /games | [**get_gamenight**](DefaultApi.md#get_gamenight) | **GET** /gamenight | [**get_gamenights**](DefaultApi.md#get_gamenights) | **GET** /gamenights | Get a all gamenights -[**get_token**](DefaultApi.md#get_token) | **GET** /token | -[**join_post**](DefaultApi.md#join_post) | **POST** /join | -[**leave_post**](DefaultApi.md#leave_post) | **POST** /leave | -[**location_authorize_post**](DefaultApi.md#location_authorize_post) | **POST** /location_authorize | -[**location_get**](DefaultApi.md#location_get) | **GET** /location | -[**location_post**](DefaultApi.md#location_post) | **POST** /location | +[**location_location_id_authorized_users_get**](DefaultApi.md#location_location_id_authorized_users_get) | **GET** /location/{locationId}/authorized_users/ | gets this locations authorized users +[**location_location_id_authorized_users_post**](DefaultApi.md#location_location_id_authorized_users_post) | **POST** /location/{locationId}/authorized_users/ | Authorize a user +[**location_location_id_authorized_users_user_id_delete**](DefaultApi.md#location_location_id_authorized_users_user_id_delete) | **DELETE** /location/{locationId}/authorized_users/{userId} | +[**location_location_id_get**](DefaultApi.md#location_location_id_get) | **GET** /location/{locationId} | gets this location [**locations_get**](DefaultApi.md#locations_get) | **GET** /locations | -[**own_post**](DefaultApi.md#own_post) | **POST** /own | -[**owned_games_get**](DefaultApi.md#owned_games_get) | **GET** /owned_games | -[**participants_get**](DefaultApi.md#participants_get) | **GET** /participants | Get all participants for a gamenight -[**post_gamenight**](DefaultApi.md#post_gamenight) | **POST** /gamenight | -[**post_register**](DefaultApi.md#post_register) | **POST** /user | -[**post_token**](DefaultApi.md#post_token) | **POST** /token | -[**rename_game_post**](DefaultApi.md#rename_game_post) | **POST** /rename_game | -[**user_get**](DefaultApi.md#user_get) | **GET** /user | +[**locations_post**](DefaultApi.md#locations_post) | **POST** /locations | +[**post_gamenight**](DefaultApi.md#post_gamenight) | **POST** /gamenights | +[**post_refresh_tokenz**](DefaultApi.md#post_refresh_tokenz) | **POST** /refresh_token | Refresh a user token +[**post_token**](DefaultApi.md#post_token) | **POST** /token | Login a user. +[**post_user**](DefaultApi.md#post_user) | **POST** /users | Registers a user into gamenight. +[**user_user_id_get**](DefaultApi.md#user_user_id_get) | **GET** /user/{userId} | +[**user_user_id_owned_games_get**](DefaultApi.md#user_user_id_owned_games_get) | **GET** /user/{userId}/owned_games | Get owned games of user [**users_get**](DefaultApi.md#users_get) | **GET** /users | -## authorized_location_user_ids_get - -> Vec authorized_location_user_ids_get(location_id) +## game_game_id_delete +> game_game_id_delete(game_id, game_id2) +Delete this game. ### Parameters Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**location_id** | Option<[**LocationId**](LocationId.md)> | | | - -### Return type - -[**Vec**](UserId.md) - -### Authorization - -[JWT-Auth](../README.md#JWT-Auth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## disown_post - -> disown_post(game_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | Option<[**GameId**](GameId.md)> | | | +**game_id** | **String** | Uuid of game to delete. | [required] | +**game_id2** | Option<[**GameId**](GameId.md)> | | | ### Return type @@ -87,45 +61,17 @@ Name | Type | Description | Required | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## game_delete - -> game_delete(game_id) +## game_game_id_get +> models::Game game_game_id_get(game_id) +Get this specific game ### Parameters Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | Option<[**GameId**](GameId.md)> | | | - -### Return type - - (empty response body) - -### Authorization - -[JWT-Auth](../README.md#JWT-Auth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## game_get - -> models::Game game_get(game_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | Option<[**GameId**](GameId.md)> | | | +**game_id** | **String** | Uuid of game to get. | [required] | ### Return type @@ -137,15 +83,102 @@ Name | Type | Description | Required | Notes ### HTTP request headers +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## game_game_id_owner_user_id_delete + +> game_game_id_owner_user_id_delete(game_id, user_id) +Own this game + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**game_id** | **String** | Uuid of game that user no longer owns. | [required] | +**user_id** | **String** | Uuid of user that no longer owns. | [required] | + +### Return type + + (empty response body) + +### Authorization + +[JWT-Auth](../README.md#JWT-Auth) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## game_game_id_owners_post + +> game_game_id_owners_post(game_id, own_game) +Own this game + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**game_id** | **String** | Uuid of game to own. | [required] | +**own_game** | Option<[**OwnGame**](OwnGame.md)> | | | + +### Return type + + (empty response body) + +### Authorization + +[JWT-Auth](../README.md#JWT-Auth) + +### HTTP request headers + - **Content-Type**: application/json - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## game_post +## game_game_id_put -> models::GameId game_post(add_game_request_body) +> game_game_id_put(game_id, edit_game_request_body) +Changes this game resource + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**game_id** | **String** | Uuid of game to change. | [required] | +**edit_game_request_body** | Option<[**EditGameRequestBody**](EditGameRequestBody.md)> | | | + +### Return type + + (empty response body) + +### Authorization + +[JWT-Auth](../README.md#JWT-Auth) + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## gamenight_gamenight_id_participant_user_id_delete + +> gamenight_gamenight_id_participant_user_id_delete(gamenight_id, user_id, gamenight_id2) ### Parameters @@ -153,11 +186,73 @@ Name | Type | Description | Required | Notes Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**add_game_request_body** | Option<[**AddGameRequestBody**](AddGameRequestBody.md)> | | | +**gamenight_id** | **String** | Uuid of gamenight to delete participant for | [required] | +**user_id** | **String** | Uuid of the of the participant to remove | [required] | +**gamenight_id2** | Option<[**GamenightId**](GamenightId.md)> | | | ### Return type -[**models::GameId**](GameId.md) + (empty response body) + +### Authorization + +[JWT-Auth](../README.md#JWT-Auth) + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## gamenight_gamenight_id_participants_get + +> models::Participants gamenight_gamenight_id_participants_get(gamenight_id, gamenight_id2) +Get all participants for a gamenight + +Retrieve the participants of a single gamenight by id. + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**gamenight_id** | **String** | Uuid of gamenight to get participants for. | [required] | +**gamenight_id2** | Option<[**GamenightId**](GamenightId.md)> | | | + +### Return type + +[**models::Participants**](Participants.md) + +### Authorization + +[JWT-Auth](../README.md#JWT-Auth) + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## gamenight_gamenight_id_participants_post + +> gamenight_gamenight_id_participants_post(gamenight_id, user_id) +Add a participant + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**gamenight_id** | **String** | Uuid of gamenight to add participants for. | [required] | +**user_id** | Option<[**UserId**](UserId.md)> | | | + +### Return type + + (empty response body) ### Authorization @@ -196,9 +291,9 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## get_gamenight +## games_post -> models::Gamenight get_gamenight(get_gamenight_request_body) +> models::GameId games_post(add_game_request_body) ### Parameters @@ -206,7 +301,32 @@ This endpoint does not need any parameter. Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**get_gamenight_request_body** | Option<[**GetGamenightRequestBody**](GetGamenightRequestBody.md)> | | | +**add_game_request_body** | Option<[**AddGameRequestBody**](AddGameRequestBody.md)> | | | + +### Return type + +[**models::GameId**](GameId.md) + +### Authorization + +[JWT-Auth](../README.md#JWT-Auth) + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## get_gamenight + +> models::Gamenight get_gamenight() + + +### Parameters + +This endpoint does not need any parameter. ### Return type @@ -218,7 +338,7 @@ Name | Type | Description | Required | Notes ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not defined - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -251,47 +371,46 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## get_token +## location_location_id_authorized_users_get -> models::Token get_token(login) - - -Submit your credentials to get a JWT-token to use with the rest of the api. +> Vec location_location_id_authorized_users_get(location_id) +gets this locations authorized users ### Parameters Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**login** | Option<[**Login**](Login.md)> | | | +**location_id** | **String** | Uuid of location to get authorized users for. | [required] | ### Return type -[**models::Token**](Token.md) +[**Vec**](UserId.md) ### Authorization -No authorization required +[JWT-Auth](../README.md#JWT-Auth) ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not defined - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## join_post - -> join_post(gamenight_id) +## location_location_id_authorized_users_post +> location_location_id_authorized_users_post(location_id, user_id) +Authorize a user ### Parameters Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**gamenight_id** | Option<[**GamenightId**](GamenightId.md)> | | | +**location_id** | **String** | Uuid location to authorize for. | [required] | +**user_id** | Option<[**UserId**](UserId.md)> | | | ### Return type @@ -309,9 +428,9 @@ Name | Type | Description | Required | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## leave_post +## location_location_id_authorized_users_user_id_delete -> leave_post(gamenight_id) +> location_location_id_authorized_users_user_id_delete(location_id, user_id) ### Parameters @@ -319,7 +438,8 @@ Name | Type | Description | Required | Notes Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**gamenight_id** | Option<[**GamenightId**](GamenightId.md)> | | | +**location_id** | **String** | Uuid of location to deauthorize for. | [required] | +**user_id** | **String** | Uuid of user ot deauthorize. | [required] | ### Return type @@ -331,51 +451,23 @@ Name | Type | Description | Required | Notes ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not defined - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## location_authorize_post - -> location_authorize_post(authorize_location_request_body) +## location_location_id_get +> models::Location location_location_id_get(location_id) +gets this location ### Parameters Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**authorize_location_request_body** | Option<[**AuthorizeLocationRequestBody**](AuthorizeLocationRequestBody.md)> | | | - -### Return type - - (empty response body) - -### Authorization - -[JWT-Auth](../README.md#JWT-Auth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## location_get - -> models::Location location_get(location_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**location_id** | Option<[**LocationId**](LocationId.md)> | | | +**location_id** | **String** | Uuid of location to get. | [required] | ### Return type @@ -387,35 +479,7 @@ Name | Type | Description | Required | Notes ### HTTP request headers -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## location_post - -> models::LocationId location_post(add_location_request_body) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**add_location_request_body** | Option<[**AddLocationRequestBody**](AddLocationRequestBody.md)> | | | - -### Return type - -[**models::LocationId**](LocationId.md) - -### Authorization - -[JWT-Auth](../README.md#JWT-Auth) - -### HTTP request headers - -- **Content-Type**: application/json +- **Content-Type**: Not defined - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -446,9 +510,9 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## own_post +## locations_post -> own_post(own_game_request_body) +> models::LocationId locations_post(add_location_request_body) ### Parameters @@ -456,69 +520,11 @@ This endpoint does not need any parameter. Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**own_game_request_body** | Option<[**OwnGameRequestBody**](OwnGameRequestBody.md)> | | | +**add_location_request_body** | Option<[**AddLocationRequestBody**](AddLocationRequestBody.md)> | | | ### Return type - (empty response body) - -### Authorization - -[JWT-Auth](../README.md#JWT-Auth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## owned_games_get - -> Vec owned_games_get(user_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**user_id** | Option<[**UserId**](UserId.md)> | | | - -### Return type - -[**Vec**](OwnedGame.md) - -### Authorization - -[JWT-Auth](../README.md#JWT-Auth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## participants_get - -> models::Participants participants_get(gamenight_id) -Get all participants for a gamenight - -Retrieve the participants of a single gamenight by id. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**gamenight_id** | Option<[**GamenightId**](GamenightId.md)> | | | - -### Return type - -[**models::Participants**](Participants.md) +[**models::LocationId**](LocationId.md) ### Authorization @@ -562,10 +568,67 @@ Name | Type | Description | Required | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## post_register +## post_refresh_tokenz -> post_register(registration) +> models::Token post_refresh_tokenz() +Refresh a user token +Refresh your JWT-token without logging in again. + +### Parameters + +This endpoint does not need any parameter. + +### Return type + +[**models::Token**](Token.md) + +### Authorization + +[JWT-Auth](../README.md#JWT-Auth) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## post_token + +> models::Token post_token(login) +Login a user. + +Submit your credentials to get a JWT-token to use with the rest of the api. + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**login** | Option<[**Login**](Login.md)> | | | + +### Return type + +[**models::Token**](Token.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## post_user + +> post_user(registration) +Registers a user into gamenight. Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match. @@ -592,20 +655,23 @@ Name | Type | Description | Required | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## post_token +## user_user_id_get -> models::Token post_token() +> models::User user_user_id_get(user_id) -Refresh your JWT-token without logging in again. +Get a user from primary id ### Parameters -This endpoint does not need any parameter. + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**user_id** | **String** | Uuid of user to get | [required] | ### Return type -[**models::Token**](Token.md) +[**models::User**](User.md) ### Authorization @@ -619,21 +685,21 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -## rename_game_post - -> rename_game_post(rename_game_request_body) +## user_user_id_owned_games_get +> Vec user_user_id_owned_games_get(user_id) +Get owned games of user ### Parameters Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**rename_game_request_body** | Option<[**RenameGameRequestBody**](RenameGameRequestBody.md)> | | | +**user_id** | **String** | Uuid of user to get owned games for. | [required] | ### Return type - (empty response body) +[**Vec**](OwnedGame.md) ### Authorization @@ -641,37 +707,7 @@ Name | Type | Description | Required | Notes ### HTTP request headers -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## user_get - -> models::User user_get(user_id) - - -Get a user from primary id - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**user_id** | Option<[**UserId**](UserId.md)> | | | - -### Return type - -[**models::User**](User.md) - -### Authorization - -[JWT-Auth](../README.md#JWT-Auth) - -### HTTP request headers - -- **Content-Type**: application/json +- **Content-Type**: Not defined - **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/gamenight-api-client-rs/docs/EditGameRequestBody.md b/gamenight-api-client-rs/docs/EditGameRequestBody.md new file mode 100644 index 0000000..4d1e645 --- /dev/null +++ b/gamenight-api-client-rs/docs/EditGameRequestBody.md @@ -0,0 +1,12 @@ +# EditGameRequestBody + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **String** | | +**name** | **String** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/gamenight-api-client-rs/docs/OwnGame.md b/gamenight-api-client-rs/docs/OwnGame.md new file mode 100644 index 0000000..a6acd0a --- /dev/null +++ b/gamenight-api-client-rs/docs/OwnGame.md @@ -0,0 +1,12 @@ +# OwnGame + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**user_id** | **String** | | +**location_id** | Option<**String**> | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/gamenight-api-client-rs/docs/OwnedGame.md b/gamenight-api-client-rs/docs/OwnedGame.md index ee2055e..16367ca 100644 --- a/gamenight-api-client-rs/docs/OwnedGame.md +++ b/gamenight-api-client-rs/docs/OwnedGame.md @@ -4,6 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**user_id** | **String** | | **game_id** | **String** | | **location_id** | Option<**String**> | | [optional] diff --git a/gamenight-api-client-rs/src/apis/default_api.rs b/gamenight-api-client-rs/src/apis/default_api.rs index 40d4169..4c0332e 100644 --- a/gamenight-api-client-rs/src/apis/default_api.rs +++ b/gamenight-api-client-rs/src/apis/default_api.rs @@ -20,120 +20,125 @@ use crate::apis::ContentType; #[async_trait] pub trait DefaultApi: Send + Sync { - /// GET /authorized_location_user_ids + /// DELETE /game/{gameId} /// /// - async fn authorized_location_user_ids_get<'location_id>(&self, location_id: Option) -> Result, Error>; + async fn game_game_id_delete<'game_id, 'game_id2>(&self, game_id: &'game_id str, game_id2: Option) -> Result<(), Error>; - /// POST /disown + /// GET /game/{gameId} /// /// - async fn disown_post<'game_id>(&self, game_id: Option) -> Result<(), Error>; + async fn game_game_id_get<'game_id>(&self, game_id: &'game_id str) -> Result>; - /// DELETE /game + /// DELETE /game/{gameId}/owner/{userId} /// /// - async fn game_delete<'game_id>(&self, game_id: Option) -> Result<(), Error>; + async fn game_game_id_owner_user_id_delete<'game_id, 'user_id>(&self, game_id: &'game_id str, user_id: &'user_id str) -> Result<(), Error>; - /// GET /game + /// POST /game/{gameId}/owners /// /// - async fn game_get<'game_id>(&self, game_id: Option) -> Result>; + async fn game_game_id_owners_post<'game_id, 'own_game>(&self, game_id: &'game_id str, own_game: Option) -> Result<(), Error>; - /// POST /game + /// PUT /game/{gameId} /// /// - async fn game_post<'add_game_request_body>(&self, add_game_request_body: Option) -> Result>; + async fn game_game_id_put<'game_id, 'edit_game_request_body>(&self, game_id: &'game_id str, edit_game_request_body: Option) -> Result<(), Error>; + + /// DELETE /gamenight/{gamenightId}/participant/{userId} + /// + /// + async fn gamenight_gamenight_id_participant_user_id_delete<'gamenight_id, 'user_id, 'gamenight_id2>(&self, gamenight_id: &'gamenight_id str, user_id: &'user_id str, gamenight_id2: Option) -> Result<(), Error>; + + /// GET /gamenight/{gamenightId}/participants + /// + /// Retrieve the participants of a single gamenight by id. + async fn gamenight_gamenight_id_participants_get<'gamenight_id, 'gamenight_id2>(&self, gamenight_id: &'gamenight_id str, gamenight_id2: Option) -> Result>; + + /// POST /gamenight/{gamenightId}/participants + /// + /// + async fn gamenight_gamenight_id_participants_post<'gamenight_id, 'user_id>(&self, gamenight_id: &'gamenight_id str, user_id: Option) -> Result<(), Error>; /// GET /games /// /// async fn games_get<>(&self, ) -> Result, Error>; + /// POST /games + /// + /// + async fn games_post<'add_game_request_body>(&self, add_game_request_body: Option) -> Result>; + /// GET /gamenight /// /// - async fn get_gamenight<'get_gamenight_request_body>(&self, get_gamenight_request_body: Option) -> Result>; + async fn get_gamenight<>(&self, ) -> Result>; /// GET /gamenights /// /// Retrieve the list of gamenights on this gamenight server. Requires authorization. async fn get_gamenights<>(&self, ) -> Result, Error>; - /// GET /token - /// - /// Submit your credentials to get a JWT-token to use with the rest of the api. - async fn get_token<'login>(&self, login: Option) -> Result>; - - /// POST /join + /// GET /location/{locationId}/authorized_users/ /// /// - async fn join_post<'gamenight_id>(&self, gamenight_id: Option) -> Result<(), Error>; + async fn location_location_id_authorized_users_get<'location_id>(&self, location_id: &'location_id str) -> Result, Error>; - /// POST /leave + /// POST /location/{locationId}/authorized_users/ /// /// - async fn leave_post<'gamenight_id>(&self, gamenight_id: Option) -> Result<(), Error>; + async fn location_location_id_authorized_users_post<'location_id, 'user_id>(&self, location_id: &'location_id str, user_id: Option) -> Result<(), Error>; - /// POST /location_authorize + /// DELETE /location/{locationId}/authorized_users/{userId} /// /// - async fn location_authorize_post<'authorize_location_request_body>(&self, authorize_location_request_body: Option) -> Result<(), Error>; + async fn location_location_id_authorized_users_user_id_delete<'location_id, 'user_id>(&self, location_id: &'location_id str, user_id: &'user_id str) -> Result<(), Error>; - /// GET /location + /// GET /location/{locationId} /// /// - async fn location_get<'location_id>(&self, location_id: Option) -> Result>; - - /// POST /location - /// - /// - async fn location_post<'add_location_request_body>(&self, add_location_request_body: Option) -> Result>; + async fn location_location_id_get<'location_id>(&self, location_id: &'location_id str) -> Result>; /// GET /locations /// /// async fn locations_get<>(&self, ) -> Result, Error>; - /// POST /own + /// POST /locations /// /// - async fn own_post<'own_game_request_body>(&self, own_game_request_body: Option) -> Result<(), Error>; + async fn locations_post<'add_location_request_body>(&self, add_location_request_body: Option) -> Result>; - /// GET /owned_games - /// - /// - async fn owned_games_get<'user_id>(&self, user_id: Option) -> Result, Error>; - - /// GET /participants - /// - /// Retrieve the participants of a single gamenight by id. - async fn participants_get<'gamenight_id>(&self, gamenight_id: Option) -> Result>; - - /// POST /gamenight + /// POST /gamenights /// /// Add a gamenight by providing a name and a date, only available when providing an JWT token. async fn post_gamenight<'add_gamenight_request_body>(&self, add_gamenight_request_body: Option) -> Result<(), Error>; - /// POST /user + /// POST /refresh_token /// - /// Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match. - async fn post_register<'registration>(&self, registration: Option) -> Result<(), Error>; + /// Refresh your JWT-token without logging in again. + async fn post_refresh_tokenz<>(&self, ) -> Result>; /// POST /token /// - /// Refresh your JWT-token without logging in again. - async fn post_token<>(&self, ) -> Result>; + /// Submit your credentials to get a JWT-token to use with the rest of the api. + async fn post_token<'login>(&self, login: Option) -> Result>; - /// POST /rename_game + /// POST /users /// - /// - async fn rename_game_post<'rename_game_request_body>(&self, rename_game_request_body: Option) -> Result<(), Error>; + /// Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match. + async fn post_user<'registration>(&self, registration: Option) -> Result<(), Error>; - /// GET /user + /// GET /user/{userId} /// /// Get a user from primary id - async fn user_get<'user_id>(&self, user_id: Option) -> Result>; + async fn user_user_id_get<'user_id>(&self, user_id: &'user_id str) -> Result>; + + /// GET /user/{userId}/owned_games + /// + /// + async fn user_user_id_owned_games_get<'user_id>(&self, user_id: &'user_id str) -> Result, Error>; /// GET /users /// @@ -155,84 +160,12 @@ impl DefaultApiClient { #[async_trait] impl DefaultApi for DefaultApiClient { - async fn authorized_location_user_ids_get<'location_id>(&self, location_id: Option) -> Result, Error> { + async fn game_game_id_delete<'game_id, 'game_id2>(&self, game_id: &'game_id str, game_id2: Option) -> Result<(), Error> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/authorized_location_user_ids", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&location_id); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content_type = local_var_resp - .headers() - .get("content-type") - .and_then(|v| v.to_str().ok()) - .unwrap_or("application/octet-stream"); - let local_var_content_type = super::ContentType::from(local_var_content_type); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - match local_var_content_type { - ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), - ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec<models::UserId>`"))), - ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `Vec<models::UserId>`")))), - } - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } - } - - async fn disown_post<'game_id>(&self, game_id: Option) -> Result<(), Error> { - let local_var_configuration = &self.configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/disown", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&game_id); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } - } - - async fn game_delete<'game_id>(&self, game_id: Option) -> Result<(), Error> { - let local_var_configuration = &self.configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/game", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/game/{gameId}", local_var_configuration.base_path, gameId=crate::apis::urlencode(game_id)); let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -241,7 +174,7 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&game_id); + local_var_req_builder = local_var_req_builder.json(&game_id2); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -252,18 +185,18 @@ impl DefaultApi for DefaultApiClient { if !local_var_status.is_client_error() && !local_var_status.is_server_error() { Ok(()) } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } } - async fn game_get<'game_id>(&self, game_id: Option) -> Result> { + async fn game_game_id_get<'game_id>(&self, game_id: &'game_id str) -> Result> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/game", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/game/{gameId}", local_var_configuration.base_path, gameId=crate::apis::urlencode(game_id)); let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -272,7 +205,6 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&game_id); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -293,18 +225,48 @@ impl DefaultApi for DefaultApiClient { ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::Game`")))), } } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } } - async fn game_post<'add_game_request_body>(&self, add_game_request_body: Option) -> Result> { + async fn game_game_id_owner_user_id_delete<'game_id, 'user_id>(&self, game_id: &'game_id str, user_id: &'user_id str) -> Result<(), Error> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/game", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/game/{gameId}/owner/{userId}", local_var_configuration.base_path, gameId=crate::apis::urlencode(game_id), userId=crate::apis::urlencode(user_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + async fn game_game_id_owners_post<'game_id, 'own_game>(&self, game_id: &'game_id str, own_game: Option) -> Result<(), Error> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/game/{gameId}/owners", local_var_configuration.base_path, gameId=crate::apis::urlencode(game_id)); let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -313,7 +275,101 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&add_game_request_body); + local_var_req_builder = local_var_req_builder.json(&own_game); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + async fn game_game_id_put<'game_id, 'edit_game_request_body>(&self, game_id: &'game_id str, edit_game_request_body: Option) -> Result<(), Error> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/game/{gameId}", local_var_configuration.base_path, gameId=crate::apis::urlencode(game_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + local_var_req_builder = local_var_req_builder.json(&edit_game_request_body); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + async fn gamenight_gamenight_id_participant_user_id_delete<'gamenight_id, 'user_id, 'gamenight_id2>(&self, gamenight_id: &'gamenight_id str, user_id: &'user_id str, gamenight_id2: Option) -> Result<(), Error> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/gamenight/{gamenightId}/participant/{userId}", local_var_configuration.base_path, gamenightId=crate::apis::urlencode(gamenight_id), userId=crate::apis::urlencode(user_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + local_var_req_builder = local_var_req_builder.json(&gamenight_id2); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + /// Retrieve the participants of a single gamenight by id. + async fn gamenight_gamenight_id_participants_get<'gamenight_id, 'gamenight_id2>(&self, gamenight_id: &'gamenight_id str, gamenight_id2: Option) -> Result> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/gamenight/{gamenightId}/participants", local_var_configuration.base_path, gamenightId=crate::apis::urlencode(gamenight_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + local_var_req_builder = local_var_req_builder.json(&gamenight_id2); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -330,11 +386,42 @@ impl DefaultApi for DefaultApiClient { if !local_var_status.is_client_error() && !local_var_status.is_server_error() { match local_var_content_type { ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), - ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::GameId`"))), - ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::GameId`")))), + ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Participants`"))), + ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::Participants`")))), } } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + async fn gamenight_gamenight_id_participants_post<'gamenight_id, 'user_id>(&self, gamenight_id: &'gamenight_id str, user_id: Option) -> Result<(), Error> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/gamenight/{gamenightId}/participants", local_var_configuration.base_path, gamenightId=crate::apis::urlencode(gamenight_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + local_var_req_builder = local_var_req_builder.json(&user_id); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } @@ -380,7 +467,48 @@ impl DefaultApi for DefaultApiClient { } } - async fn get_gamenight<'get_gamenight_request_body>(&self, get_gamenight_request_body: Option) -> Result> { + async fn games_post<'add_game_request_body>(&self, add_game_request_body: Option) -> Result> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/games", local_var_configuration.base_path); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + local_var_req_builder = local_var_req_builder.json(&add_game_request_body); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content_type = local_var_resp + .headers() + .get("content-type") + .and_then(|v| v.to_str().ok()) + .unwrap_or("application/octet-stream"); + let local_var_content_type = super::ContentType::from(local_var_content_type); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + match local_var_content_type { + ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), + ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::GameId`"))), + ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::GameId`")))), + } + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + async fn get_gamenight<>(&self, ) -> Result> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; @@ -394,7 +522,6 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&get_gamenight_request_body); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -462,19 +589,20 @@ impl DefaultApi for DefaultApiClient { } } - /// Submit your credentials to get a JWT-token to use with the rest of the api. - async fn get_token<'login>(&self, login: Option) -> Result> { + async fn location_location_id_authorized_users_get<'location_id>(&self, location_id: &'location_id str) -> Result, Error> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/token", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/location/{locationId}/authorized_users/", local_var_configuration.base_path, locationId=crate::apis::urlencode(location_id)); let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); } - local_var_req_builder = local_var_req_builder.json(&login); + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -491,22 +619,22 @@ impl DefaultApi for DefaultApiClient { if !local_var_status.is_client_error() && !local_var_status.is_server_error() { match local_var_content_type { ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), - ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Token`"))), - ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::Token`")))), + ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec<models::UserId>`"))), + ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `Vec<models::UserId>`")))), } } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } } - async fn join_post<'gamenight_id>(&self, gamenight_id: Option) -> Result<(), Error> { + async fn location_location_id_authorized_users_post<'location_id, 'user_id>(&self, location_id: &'location_id str, user_id: Option) -> Result<(), Error> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/join", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/location/{locationId}/authorized_users/", local_var_configuration.base_path, locationId=crate::apis::urlencode(location_id)); let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -515,7 +643,7 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&gamenight_id); + local_var_req_builder = local_var_req_builder.json(&user_id); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -526,19 +654,19 @@ impl DefaultApi for DefaultApiClient { if !local_var_status.is_client_error() && !local_var_status.is_server_error() { Ok(()) } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } } - async fn leave_post<'gamenight_id>(&self, gamenight_id: Option) -> Result<(), Error> { + async fn location_location_id_authorized_users_user_id_delete<'location_id, 'user_id>(&self, location_id: &'location_id str, user_id: &'user_id str) -> Result<(), Error> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/leave", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + let local_var_uri_str = format!("{}/location/{locationId}/authorized_users/{userId}", local_var_configuration.base_path, locationId=crate::apis::urlencode(location_id), userId=crate::apis::urlencode(user_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); @@ -546,7 +674,6 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&gamenight_id); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -557,49 +684,18 @@ impl DefaultApi for DefaultApiClient { if !local_var_status.is_client_error() && !local_var_status.is_server_error() { Ok(()) } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } } - async fn location_authorize_post<'authorize_location_request_body>(&self, authorize_location_request_body: Option) -> Result<(), Error> { + async fn location_location_id_get<'location_id>(&self, location_id: &'location_id str) -> Result> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/location_authorize", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&authorize_location_request_body); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } - } - - async fn location_get<'location_id>(&self, location_id: Option) -> Result> { - let local_var_configuration = &self.configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/location", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/location/{locationId}", local_var_configuration.base_path, locationId=crate::apis::urlencode(location_id)); let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -608,7 +704,6 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&location_id); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -629,48 +724,7 @@ impl DefaultApi for DefaultApiClient { ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::Location`")))), } } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } - } - - async fn location_post<'add_location_request_body>(&self, add_location_request_body: Option) -> Result> { - let local_var_configuration = &self.configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/location", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&add_location_request_body); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content_type = local_var_resp - .headers() - .get("content-type") - .and_then(|v| v.to_str().ok()) - .unwrap_or("application/octet-stream"); - let local_var_content_type = super::ContentType::from(local_var_content_type); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - match local_var_content_type { - ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), - ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::LocationId`"))), - ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::LocationId`")))), - } - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } @@ -716,12 +770,12 @@ impl DefaultApi for DefaultApiClient { } } - async fn own_post<'own_game_request_body>(&self, own_game_request_body: Option) -> Result<(), Error> { + async fn locations_post<'add_location_request_body>(&self, add_location_request_body: Option) -> Result> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/own", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/locations", local_var_configuration.base_path); let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -730,38 +784,7 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&own_game_request_body); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } - } - - async fn owned_games_get<'user_id>(&self, user_id: Option) -> Result, Error> { - let local_var_configuration = &self.configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/owned_games", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&user_id); + local_var_req_builder = local_var_req_builder.json(&add_location_request_body); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -778,53 +801,11 @@ impl DefaultApi for DefaultApiClient { if !local_var_status.is_client_error() && !local_var_status.is_server_error() { match local_var_content_type { ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), - ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec<models::OwnedGame>`"))), - ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `Vec<models::OwnedGame>`")))), + ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::LocationId`"))), + ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::LocationId`")))), } } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } - } - - /// Retrieve the participants of a single gamenight by id. - async fn participants_get<'gamenight_id>(&self, gamenight_id: Option) -> Result> { - let local_var_configuration = &self.configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/participants", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&gamenight_id); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content_type = local_var_resp - .headers() - .get("content-type") - .and_then(|v| v.to_str().ok()) - .unwrap_or("application/octet-stream"); - let local_var_content_type = super::ContentType::from(local_var_content_type); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - match local_var_content_type { - ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), - ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Participants`"))), - ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::Participants`")))), - } - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } @@ -836,7 +817,7 @@ impl DefaultApi for DefaultApiClient { let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/gamenight", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/gamenights", local_var_configuration.base_path); let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -862,45 +843,13 @@ impl DefaultApi for DefaultApiClient { } } - /// Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match. - async fn post_register<'registration>(&self, registration: Option) -> Result<(), Error> { - let local_var_configuration = &self.configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/user", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(®istration); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } - } - /// Refresh your JWT-token without logging in again. - async fn post_token<>(&self, ) -> Result> { + async fn post_refresh_tokenz<>(&self, ) -> Result> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/token", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/refresh_token", local_var_configuration.base_path); let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -922,6 +871,45 @@ impl DefaultApi for DefaultApiClient { let local_var_content_type = super::ContentType::from(local_var_content_type); let local_var_content = local_var_resp.text().await?; + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + match local_var_content_type { + ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), + ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Token`"))), + ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::Token`")))), + } + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + /// Submit your credentials to get a JWT-token to use with the rest of the api. + async fn post_token<'login>(&self, login: Option) -> Result> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/token", local_var_configuration.base_path); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + local_var_req_builder = local_var_req_builder.json(&login); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content_type = local_var_resp + .headers() + .get("content-type") + .and_then(|v| v.to_str().ok()) + .unwrap_or("application/octet-stream"); + let local_var_content_type = super::ContentType::from(local_var_content_type); + let local_var_content = local_var_resp.text().await?; + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { match local_var_content_type { ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), @@ -935,12 +923,13 @@ impl DefaultApi for DefaultApiClient { } } - async fn rename_game_post<'rename_game_request_body>(&self, rename_game_request_body: Option) -> Result<(), Error> { + /// Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match. + async fn post_user<'registration>(&self, registration: Option) -> Result<(), Error> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/rename_game", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/users", local_var_configuration.base_path); let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -949,7 +938,7 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&rename_game_request_body); + local_var_req_builder = local_var_req_builder.json(®istration); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -960,19 +949,19 @@ impl DefaultApi for DefaultApiClient { if !local_var_status.is_client_error() && !local_var_status.is_server_error() { Ok(()) } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } } /// Get a user from primary id - async fn user_get<'user_id>(&self, user_id: Option) -> Result> { + async fn user_user_id_get<'user_id>(&self, user_id: &'user_id str) -> Result> { let local_var_configuration = &self.configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/user", local_var_configuration.base_path); + let local_var_uri_str = format!("{}/user/{userId}", local_var_configuration.base_path, userId=crate::apis::urlencode(user_id)); let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { @@ -981,7 +970,6 @@ impl DefaultApi for DefaultApiClient { if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); }; - local_var_req_builder = local_var_req_builder.json(&user_id); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -1002,7 +990,47 @@ impl DefaultApi for DefaultApiClient { ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `models::User`")))), } } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } + } + + async fn user_user_id_owned_games_get<'user_id>(&self, user_id: &'user_id str) -> Result, Error> { + let local_var_configuration = &self.configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/user/{userId}/owned_games", local_var_configuration.base_path, userId=crate::apis::urlencode(user_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content_type = local_var_resp + .headers() + .get("content-type") + .and_then(|v| v.to_str().ok()) + .unwrap_or("application/octet-stream"); + let local_var_content_type = super::ContentType::from(local_var_content_type); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + match local_var_content_type { + ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from), + ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec<models::OwnedGame>`"))), + ContentType::Unsupported(local_var_unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{local_var_unknown_type}` content type response that cannot be converted to `Vec<models::OwnedGame>`")))), + } + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; Err(Error::ResponseError(local_var_error)) } @@ -1050,46 +1078,73 @@ impl DefaultApi for DefaultApiClient { } -/// struct for typed errors of method [`DefaultApi::authorized_location_user_ids_get`] +/// struct for typed errors of method [`DefaultApi::game_game_id_delete`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum AuthorizedLocationUserIdsGetError { +pub enum GameGameIdDeleteError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::disown_post`] +/// struct for typed errors of method [`DefaultApi::game_game_id_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum DisownPostError { +pub enum GameGameIdGetError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::game_delete`] +/// struct for typed errors of method [`DefaultApi::game_game_id_owner_user_id_delete`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum GameDeleteError { +pub enum GameGameIdOwnerUserIdDeleteError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::game_get`] +/// struct for typed errors of method [`DefaultApi::game_game_id_owners_post`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum GameGetError { +pub enum GameGameIdOwnersPostError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::game_post`] +/// struct for typed errors of method [`DefaultApi::game_game_id_put`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum GamePostError { +pub enum GameGameIdPutError { + Status401(models::Failure), + Status422(models::Failure), + UnknownValue(serde_json::Value), +} + +/// struct for typed errors of method [`DefaultApi::gamenight_gamenight_id_participant_user_id_delete`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum GamenightGamenightIdParticipantUserIdDeleteError { + Status401(models::Failure), + Status422(models::Failure), + UnknownValue(serde_json::Value), +} + +/// struct for typed errors of method [`DefaultApi::gamenight_gamenight_id_participants_get`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum GamenightGamenightIdParticipantsGetError { + Status400(models::Failure), + Status401(models::Failure), + UnknownValue(serde_json::Value), +} + +/// struct for typed errors of method [`DefaultApi::gamenight_gamenight_id_participants_post`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum GamenightGamenightIdParticipantsPostError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), @@ -1104,6 +1159,15 @@ pub enum GamesGetError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`DefaultApi::games_post`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum GamesPostError { + Status401(models::Failure), + Status422(models::Failure), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`DefaultApi::get_gamenight`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1122,54 +1186,37 @@ pub enum GetGamenightsError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::get_token`] +/// struct for typed errors of method [`DefaultApi::location_location_id_authorized_users_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum GetTokenError { - Status401(models::Failure), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`DefaultApi::join_post`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum JoinPostError { +pub enum LocationLocationIdAuthorizedUsersGetError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::leave_post`] +/// struct for typed errors of method [`DefaultApi::location_location_id_authorized_users_post`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum LeavePostError { +pub enum LocationLocationIdAuthorizedUsersPostError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::location_authorize_post`] +/// struct for typed errors of method [`DefaultApi::location_location_id_authorized_users_user_id_delete`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum LocationAuthorizePostError { +pub enum LocationLocationIdAuthorizedUsersUserIdDeleteError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::location_get`] +/// struct for typed errors of method [`DefaultApi::location_location_id_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum LocationGetError { - Status401(models::Failure), - Status422(models::Failure), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`DefaultApi::location_post`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum LocationPostError { +pub enum LocationLocationIdGetError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), @@ -1184,33 +1231,15 @@ pub enum LocationsGetError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::own_post`] +/// struct for typed errors of method [`DefaultApi::locations_post`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum OwnPostError { +pub enum LocationsPostError { Status401(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::owned_games_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum OwnedGamesGetError { - Status401(models::Failure), - Status422(models::Failure), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`DefaultApi::participants_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ParticipantsGetError { - Status400(models::Failure), - Status401(models::Failure), - UnknownValue(serde_json::Value), -} - /// struct for typed errors of method [`DefaultApi::post_gamenight`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1220,11 +1249,11 @@ pub enum PostGamenightError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::post_register`] +/// struct for typed errors of method [`DefaultApi::post_refresh_tokenz`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum PostRegisterError { - Status422(models::Failure), +pub enum PostRefreshTokenzError { + Status401(models::Failure), UnknownValue(serde_json::Value), } @@ -1236,25 +1265,33 @@ pub enum PostTokenError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::rename_game_post`] +/// struct for typed errors of method [`DefaultApi::post_user`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum RenameGamePostError { - Status401(models::Failure), +pub enum PostUserError { Status422(models::Failure), UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`DefaultApi::user_get`] +/// struct for typed errors of method [`DefaultApi::user_user_id_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum UserGetError { +pub enum UserUserIdGetError { Status401(models::Failure), Status404(models::Failure), Status422(models::Failure), UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`DefaultApi::user_user_id_owned_games_get`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum UserUserIdOwnedGamesGetError { + Status401(models::Failure), + Status422(models::Failure), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`DefaultApi::users_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] diff --git a/gamenight-api-client-rs/src/models/edit_game_request_body.rs b/gamenight-api-client-rs/src/models/edit_game_request_body.rs new file mode 100644 index 0000000..46099f2 --- /dev/null +++ b/gamenight-api-client-rs/src/models/edit_game_request_body.rs @@ -0,0 +1,30 @@ +/* + * Gamenight + * + * Api specification for a Gamenight server + * + * The version of the OpenAPI document: 1.0 + * Contact: dennis@brentj.es + * Generated by: https://openapi-generator.tech + */ + +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct EditGameRequestBody { + #[serde(rename = "id")] + pub id: String, + #[serde(rename = "name")] + pub name: String, +} + +impl EditGameRequestBody { + pub fn new(id: String, name: String) -> EditGameRequestBody { + EditGameRequestBody { + id, + name, + } + } +} + diff --git a/gamenight-api-client-rs/src/models/mod.rs b/gamenight-api-client-rs/src/models/mod.rs index 8189728..8c8ce65 100644 --- a/gamenight-api-client-rs/src/models/mod.rs +++ b/gamenight-api-client-rs/src/models/mod.rs @@ -4,8 +4,8 @@ pub mod add_gamenight_request_body; pub use self::add_gamenight_request_body::AddGamenightRequestBody; pub mod add_location_request_body; pub use self::add_location_request_body::AddLocationRequestBody; -pub mod authorize_location_request_body; -pub use self::authorize_location_request_body::AuthorizeLocationRequestBody; +pub mod edit_game_request_body; +pub use self::edit_game_request_body::EditGameRequestBody; pub mod failure; pub use self::failure::Failure; pub mod game; @@ -16,24 +16,20 @@ pub mod gamenight; pub use self::gamenight::Gamenight; pub mod gamenight_id; pub use self::gamenight_id::GamenightId; -pub mod get_gamenight_request_body; -pub use self::get_gamenight_request_body::GetGamenightRequestBody; pub mod location; pub use self::location::Location; pub mod location_id; pub use self::location_id::LocationId; pub mod login; pub use self::login::Login; -pub mod own_game_request_body; -pub use self::own_game_request_body::OwnGameRequestBody; +pub mod own_game; +pub use self::own_game::OwnGame; pub mod owned_game; pub use self::owned_game::OwnedGame; pub mod participants; pub use self::participants::Participants; pub mod registration; pub use self::registration::Registration; -pub mod rename_game_request_body; -pub use self::rename_game_request_body::RenameGameRequestBody; pub mod token; pub use self::token::Token; pub mod user; diff --git a/gamenight-api-client-rs/src/models/own_game.rs b/gamenight-api-client-rs/src/models/own_game.rs new file mode 100644 index 0000000..8acf920 --- /dev/null +++ b/gamenight-api-client-rs/src/models/own_game.rs @@ -0,0 +1,30 @@ +/* + * Gamenight + * + * Api specification for a Gamenight server + * + * The version of the OpenAPI document: 1.0 + * Contact: dennis@brentj.es + * Generated by: https://openapi-generator.tech + */ + +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct OwnGame { + #[serde(rename = "user_id")] + pub user_id: String, + #[serde(rename = "location_id", skip_serializing_if = "Option::is_none")] + pub location_id: Option, +} + +impl OwnGame { + pub fn new(user_id: String) -> OwnGame { + OwnGame { + user_id, + location_id: None, + } + } +} + diff --git a/gamenight-api-client-rs/src/models/owned_game.rs b/gamenight-api-client-rs/src/models/owned_game.rs index e329344..1828b1d 100644 --- a/gamenight-api-client-rs/src/models/owned_game.rs +++ b/gamenight-api-client-rs/src/models/owned_game.rs @@ -13,6 +13,8 @@ use serde::{Deserialize, Serialize}; #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct OwnedGame { + #[serde(rename = "user_id")] + pub user_id: String, #[serde(rename = "game_id")] pub game_id: String, #[serde(rename = "location_id", skip_serializing_if = "Option::is_none")] @@ -20,8 +22,9 @@ pub struct OwnedGame { } impl OwnedGame { - pub fn new(game_id: String) -> OwnedGame { + pub fn new(user_id: String, game_id: String) -> OwnedGame { OwnedGame { + user_id, game_id, location_id: None, } diff --git a/gamenight-database/src/owned_game.rs b/gamenight-database/src/owned_game.rs index a76925d..0d51d7f 100644 --- a/gamenight-database/src/owned_game.rs +++ b/gamenight-database/src/owned_game.rs @@ -33,9 +33,9 @@ pub fn disown_game(conn: &mut PgConnection, owned_game: OwnedGame) -> Result Result)>, DatabaseError> { +pub fn owned_games(conn: &mut PgConnection, uuid: Uuid) -> Result)>, DatabaseError> { Ok(owned_game::table - .select((owned_game::game_id, owned_game::location_id)) + .select((owned_game::user_id, owned_game::game_id, owned_game::location_id)) .filter(owned_game::user_id.eq(uuid)) .get_results(conn)?) }