Wip backend (#4)

* feat: Add new API handlers for user, project, and task management; update package dependencies

* feat: Update .gitignore, add Lambda layer configuration, and refactor DynamoDB handlers to use AWS SDK v3

* feat: Update serverless configuration and refactor API handlers to improve error handling and response structure

* feat: Add Cognito user pool name parameter and update API handlers to include CORS headers

* feat: Update task and project ID formats, add populateSeedData function, and enhance user ID handling

* feat: Update image source paths to use S3 public URL for profile and task attachments
This commit was merged in pull request #4.
This commit is contained in:
2024-11-23 18:17:00 +02:00
committed by GitHub
parent ac8455ab3a
commit 11e61829f1
39 changed files with 5438 additions and 100 deletions

View File

@@ -0,0 +1,179 @@
service: tasker-server
plugins:
- serverless-prune-plugin
provider:
stackName: ${self:service}
name: aws
region: "eu-north-1"
runtime: nodejs20.x
environment:
SLS_REGION: ${self:provider.region}
API_BASE_URL: ${ssm:/tasker/api/base-url}
TASKER_TASK_TABLE_NAME: ${ssm:/tasker/dynamodb/task-table-name}
TASKER_PROJECT_TABLE_NAME: ${ssm:/tasker/dynamodb/project-table-name}
TASKER_USER_TABLE_NAME: ${ssm:/tasker/dynamodb/user-table-name}
TASKER_TASK_EXTRA_TABLE_NAME: ${ssm:/tasker/dynamodb/task-extra-table-name}
TASKER_TEAM_TABLE_NAME: ${ssm:/tasker/dynamodb/team-table-name}
layers:
- ${ssm:/tasker/layers/tasker-layer-arn}
iam:
role:
statements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
Resource:
[
"arn:aws:dynamodb:${self:provider.region}:*:table/tasker-*",
"arn:aws:dynamodb:${self:provider.region}:*:table/tasker-*/*",
]
- Effect: Allow
Action:
- execute-api:Invoke
Resource:
- "arn:aws:execute-api:${self:provider.region}:*:*/*/POST/users"
functions:
populateSeedData:
handler: seed/populateSeedData.handler
memorySize: 1024
timeout: 60
# POST /users or triggered by Cognito
createUser:
handler: src/handlers/createUser.handler
memorySize: 1024
timeout: 60
events:
- http:
path: users
method: post
cors: true
authorizer: aws_iam
- cognitoUserPool:
existing: true
pool: ${ssm:/tasker/cognito/user-pool-name}
trigger: PostConfirmation
# POST /projects
createProject:
handler: src/handlers/createProject.handler
memorySize: 1024
timeout: 60
events:
- http:
path: projects
method: post
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# POST /tasks
createTask:
handler: src/handlers/createTask.handler
memorySize: 1024
timeout: 60
events:
- http:
path: tasks
method: post
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# GET /projects
getProjects:
handler: src/handlers/getProjects.handler
memorySize: 1024
timeout: 60
events:
- http:
path: projects
method: get
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# GET /tasks?projectId=
getTasks:
handler: src/handlers/getTasks.handler
memorySize: 1024
timeout: 60
events:
- http:
path: tasks
method: get
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# GET /teams
getTeams:
handler: src/handlers/getTeams.handler
memorySize: 1024
timeout: 60
events:
- http:
path: teams
method: get
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# GET /users
getUsers:
handler: src/handlers/getUsers.handler
memorySize: 1024
timeout: 60
events:
- http:
path: users
method: get
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# GET /users/{cognitoId}
getUser:
handler: src/handlers/getUser.handler
memorySize: 1024
timeout: 60
events:
- http:
path: users/{cognitoId}
method: get
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# GET /tasks/user/${userId}
getUserTasks:
handler: src/handlers/getUserTasks.handler
memorySize: 1024
timeout: 60
events:
- http:
path: tasks/user/{userId}
method: get
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}
# PATCH /tasks/{taskId}/status
updateTaskStatus:
handler: src/handlers/updateTaskStatus.handler
memorySize: 1024
timeout: 60
events:
- http:
path: tasks/{taskId}/status
method: patch
cors: true
authorizer:
type: COGNITO_USER_POOLS
arn: ${ssm:/tasker/cognito/user-pool-arn}