fe7bab183f
Fix a few issues with users and accounts caused by reusing code without changing it correctly. Also changed some naming mistakes that made the documentation invalid.
459 lines
No EOL
14 KiB
YAML
459 lines
No EOL
14 KiB
YAML
openapi: 3.0.0
|
|
info:
|
|
description: "This is the API specification for the ScheduleTogether Backend."
|
|
version: 0.1.0
|
|
title: ScheduleTogether Backend
|
|
termsOfService: http://zervo.org/terms/
|
|
contact:
|
|
email: contact@dev.zervo.org
|
|
license:
|
|
name: AGPL 3.0
|
|
url: https://www.gnu.org/licenses/agpl-3.0.html
|
|
tags:
|
|
- name: account
|
|
description: Everything related to account management
|
|
externalDocs:
|
|
description: Find out more
|
|
url: https://git.zervo.org/ScheduleTogether/Backend/src/branch/main/internal/api/handlers/account_handler.go
|
|
- name: users
|
|
description: Everything related to user management
|
|
externalDocs:
|
|
description: Find out more
|
|
url: https://git.zervo.org/ScheduleTogether/Backend/src/branch/main/internal/api/handlers/users_handler.go
|
|
- name: friends
|
|
description: Everything related to friends management
|
|
externalDocs:
|
|
description: Find out more
|
|
url: https://git.zervo.org/ScheduleTogether/Backend/src/branch/main/internal/api/handlers/friends_handler.go
|
|
paths:
|
|
/account/register:
|
|
post:
|
|
tags:
|
|
- account
|
|
summary: Register a new user account
|
|
description: "Used to register a new user account. By default, newly created unverified accounts will be deleted after a while. To fully complete registration, an account verify request must be sent following the registration request."
|
|
operationId: registerAccount
|
|
requestBody:
|
|
$ref: "#/components/requestBodies/AccountRegister"
|
|
responses:
|
|
"400":
|
|
description: Request body validation failed
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"200":
|
|
description: Registration successful
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/AccountRegisterResponse"
|
|
/account/verify:
|
|
post:
|
|
tags:
|
|
- account
|
|
summary: Verify a registered account
|
|
description: "Used to verify a newly registered user account. AKA complete user account registration."
|
|
operationId: verifyAccount
|
|
requestBody:
|
|
$ref: "#/components/requestBodies/AccountVerify"
|
|
responses:
|
|
"200":
|
|
description: Verification successful
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonMessage"
|
|
"400":
|
|
description: Invalid UUID or verification token
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
/account/signin:
|
|
post:
|
|
tags:
|
|
- account
|
|
summary: Sign in to an existing user account
|
|
description: "Used to retrieve a session (jwt) token for a user account, that can in turn be used to authenticate subsequent requests."
|
|
operationId: signinAccount
|
|
requestBody:
|
|
$ref: "#/components/requestBodies/AccountSignin"
|
|
responses:
|
|
"401":
|
|
description: Authentication failed
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"400":
|
|
description: Request body validation failed
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"200":
|
|
description: Signed in successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/AccountSigninResponse"
|
|
/account/signout:
|
|
post:
|
|
tags:
|
|
- account
|
|
summary: Log out of a user account
|
|
description: "Used to invalidate a user account session (aka log out) based on context. REQUIRES: Authentication."
|
|
operationId: logoutAccount
|
|
responses:
|
|
"401":
|
|
description: Unauthorized
|
|
"200":
|
|
description: Successfully logged out
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonMessage"
|
|
|
|
/users:
|
|
get:
|
|
tags:
|
|
- users
|
|
summary: Get all users
|
|
description: "WILL BE PAGINATED IN THE FUTURE. Get all available users on the instance. REQUIRES: Authentication, GetAllUsers permission."
|
|
operationId: getUsers
|
|
responses:
|
|
"500":
|
|
description: Something went wrong
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"401":
|
|
description: Unauthorized
|
|
"200":
|
|
description: Successfully got all users
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/GetAllUsersResponse"
|
|
/users/{userId}:
|
|
get:
|
|
tags:
|
|
- users
|
|
summary: Get user by internal ID
|
|
description: "Get user information about one account by internal user account ID. REQUIRES: Authentication, GetUserById permission."
|
|
operationId: getUserById
|
|
parameters:
|
|
- in: path
|
|
name: userId
|
|
schema:
|
|
type: integer
|
|
required: true
|
|
description: Numeric internal ID of the user to get
|
|
responses:
|
|
"401":
|
|
description: Unauthorized
|
|
"400":
|
|
description: Invalid parameters
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"404":
|
|
description: User not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"200":
|
|
description: Successfully got user
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DetailedUser"
|
|
/users/uuid/{userUuid}:
|
|
get:
|
|
tags:
|
|
- users
|
|
summary: Get user by UUID
|
|
description: "Get user information about one account by public user account UUID. REQUIRES: Authentication, GetUserByUuid permission."
|
|
operationId: getUserByUuid
|
|
parameters:
|
|
- in: path
|
|
name: userUuid
|
|
schema:
|
|
type: string
|
|
required: true
|
|
description: UUID of user to get
|
|
responses:
|
|
"401":
|
|
description: Unauthorized
|
|
"400":
|
|
description: Invalid parameters
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"404":
|
|
description: User not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"200":
|
|
description: Successfully got user
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DetailedUser"
|
|
/users/self:
|
|
get:
|
|
tags:
|
|
- users
|
|
summary: Get own user by session
|
|
description: "Get user information about the account which was used to authenticate the request. REQUIRES: Authentication, GetOwnUser permission."
|
|
operationId: getOwnUser
|
|
responses:
|
|
"401":
|
|
description: Unauthorized
|
|
"200":
|
|
description: Successfully got user
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DetailedUser"
|
|
|
|
/friends/add:
|
|
post:
|
|
tags:
|
|
- friends
|
|
summary: Create a friend request
|
|
description: "Create (AKA send) a friend request to another user account. The request is sent from the account used to perform this POST to the provided target account. REQUIRES: Authentication, SendFriendRequest permission."
|
|
operationId: addFriend
|
|
requestBody:
|
|
$ref: "#/components/requestBodies/FriendAdd"
|
|
responses:
|
|
"401":
|
|
description: Unauthorized
|
|
"400":
|
|
description: User does not exist, Already friends with user or Request already sent
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"200":
|
|
description: Friend request added successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonMessage"
|
|
/friends/accept:
|
|
post:
|
|
tags:
|
|
- friends
|
|
summary: Accept an incoming friend request
|
|
description: "Accept an incoming friend request to your user account, from another user account. The request is accepted by the account used to perform this POST request. REQUIRES: Authentication, AcceptFriendRequest permission."
|
|
operationId: acceptFriend
|
|
requestBody:
|
|
$ref: "#/components/requestBodies/FriendAccept"
|
|
responses:
|
|
"401":
|
|
description: Unauthorized
|
|
"400":
|
|
description: User does not exist, You are already friends with user or Friend request not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonError"
|
|
"200":
|
|
description: Friend request accepted successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CommonMessage"
|
|
/friends:
|
|
get:
|
|
tags:
|
|
- friends
|
|
summary: Get current incoming friend requests
|
|
description: "Get all current incoming friend requests to the user account used to authorize this POST request. REQUIRES: Authentication, GetOwnFriendRequests permission."
|
|
operationId: getFriendRequests
|
|
responses:
|
|
"401":
|
|
description: Unauthorized
|
|
"200":
|
|
description: Retrieved all incoming friend requests successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/FriendGetRequestsResponse"
|
|
|
|
externalDocs:
|
|
description: Find out more about ScheduleTogether
|
|
url: https://git.zervo.org/ScheduleTogether
|
|
|
|
servers:
|
|
- url: http://localhost:8080
|
|
- url: https://stbackend.swagger.io/v2
|
|
|
|
components:
|
|
requestBodies:
|
|
AccountRegister:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/AccountRegisterRequest"
|
|
AccountVerify:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/AccountVerifyRequest"
|
|
AccountSignin:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/AccountSigninRequest"
|
|
FriendAdd:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/FriendAddRequest"
|
|
FriendAccept:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/FriendAcceptRequest"
|
|
|
|
schemas:
|
|
CommonError:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
description: A string describing the error
|
|
CommonMessage:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: A message
|
|
|
|
DetailedUser:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: Internal user ID
|
|
uuid:
|
|
type: string
|
|
description: Public unique user identifier
|
|
username:
|
|
type: string
|
|
firstName:
|
|
type: string
|
|
lastName:
|
|
type: string
|
|
email:
|
|
type: string
|
|
verified:
|
|
type: boolean
|
|
friends:
|
|
type: array
|
|
items:
|
|
type: string
|
|
|
|
AccountRegisterRequest:
|
|
type: object
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
lastName:
|
|
type: string
|
|
username:
|
|
type: string
|
|
minLength: 5
|
|
maxLength: 18
|
|
email:
|
|
type: string
|
|
password:
|
|
type: string
|
|
minLength: 8
|
|
maxLength: 128
|
|
AccountRegisterResponse:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: A message describing the result
|
|
uuid:
|
|
type: string
|
|
description: The UUID of the newly created user
|
|
mustVerify:
|
|
type: boolean
|
|
description: Whether or not user needs to send account verify request to complete registration
|
|
AccountVerifyRequest:
|
|
type: object
|
|
properties:
|
|
uuid:
|
|
type: string
|
|
description: The UUID of the user account to verify
|
|
token:
|
|
type: string
|
|
description: The verification token
|
|
AccountSigninRequest:
|
|
type: object
|
|
properties:
|
|
username:
|
|
type: string
|
|
password:
|
|
type: string
|
|
AccountSigninResponse:
|
|
type: object
|
|
properties:
|
|
token:
|
|
type: string
|
|
description: The token to be used for authenticating all requests for this session
|
|
|
|
GetAllUsersResponse:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/DetailedUser"
|
|
|
|
FriendRequest:
|
|
type: object
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
description: Timestamp at which the friend request was created
|
|
source_username:
|
|
type: string
|
|
description: The username of the requesting user
|
|
source_uuid:
|
|
type: string
|
|
description: The UUID of the requesting user
|
|
target_uuid:
|
|
description: The UUID of the receiving user
|
|
FriendAddRequest:
|
|
type: object
|
|
properties:
|
|
username:
|
|
type: string
|
|
description: The username of the target user
|
|
FriendAcceptRequest:
|
|
type: object
|
|
properties:
|
|
uuid:
|
|
type: string
|
|
description: The UUID of the user from which you want to accept a friend request
|
|
FriendGetRequestsResponse:
|
|
type: object
|
|
properties:
|
|
amount:
|
|
type: integer
|
|
description: The amount of incoming friend requests
|
|
requests:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FriendRequest"
|
|
|