Merge branch 'main' of 10.11.10.35:ScheduleTogether/Backend
All checks were successful
/ build (push) Successful in 5m4s
All checks were successful
/ build (push) Successful in 5m4s
This commit is contained in:
commit
9a95946b48
7 changed files with 484 additions and 15 deletions
|
@ -1 +0,0 @@
|
|||
../../build/ci/build.yaml
|
22
.forgejo/workflows/build.yml
Normal file
22
.forgejo/workflows/build.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
on: [push]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: docker
|
||||
steps:
|
||||
# Step 1: Check out the code
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Step 2: Set up go environment
|
||||
- uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version-file: '/workspace/ScheduleTogether/Backend/go.mod'
|
||||
|
||||
# Step 3: Set the working directory and build the project
|
||||
- run: go build -x -v -o=stbackend -buildvcs=true ./cmd/stbackend/main.go
|
||||
working-directory: /workspace/ScheduleTogether/Backend
|
||||
|
||||
# Step 4: Upload the build artifact
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: build-artifact
|
||||
path: ./Backend/stbackend
|
459
api/openapi/archive/openapi-0.2.0.yaml
Normal file
459
api/openapi/archive/openapi-0.2.0.yaml
Normal file
|
@ -0,0 +1,459 @@
|
|||
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/logout:
|
||||
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/id/{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"
|
||||
|
|
@ -137,7 +137,7 @@ paths:
|
|||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/GetAllUsersResponse"
|
||||
/users/{userId}:
|
||||
/users/id/{userId}:
|
||||
get:
|
||||
tags:
|
||||
- users
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: docker
|
||||
steps:
|
||||
- run: go build -x -v -o=stbackend -buildvcs=true ./cmd/stbackend/main.
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: build-artifact
|
||||
path: ./stbackend
|
1
build/ci/build.yml
Symbolic link
1
build/ci/build.yml
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../.forgejo/workflows/build.yml
|
|
@ -36,7 +36,7 @@ import (
|
|||
func UsersHandler_RegisterRoutes(party iris.Party) {
|
||||
party.Use(middlewares.Authenticate()) // only allow authenticated users for following endpoints
|
||||
party.Get("/", middlewares.Authorize(perms.GetAllUsers), UsersGet_Handler)
|
||||
party.Get("/:id", middlewares.Authorize(perms.GetUserById), UsersGetById_Handler)
|
||||
party.Get("/id/:id", middlewares.Authorize(perms.GetUserById), UsersGetById_Handler)
|
||||
party.Get("/uuid/:uuid", middlewares.Authorize(perms.GetUserByUuid), UsersGetByUuid_Handler)
|
||||
party.Get("/self", middlewares.Authorize(perms.GetOwnUser), UsersGetSelf_Handler)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue