Compare commits

...

2 Commits

14 changed files with 713 additions and 396 deletions

View File

@ -1,6 +1,6 @@
# Time Tracker Backend Makefile
.PHONY: db-start db-stop db-test model-test run build clean migrate seed help
.PHONY: db-start db-stop db-test model-test run build clean migrate seed swagger help
# Default target
.DEFAULT_GOAL := help
@ -25,7 +25,9 @@ help:
@echo " make seed - Seed the database with initial data"
@echo " make db-drop-users - Drop the users table"
@echo " make db-reinit - Re-initialize the database"
@echo " make swagger - Generate swagger documentation"
@echo " make help - Show this help message"
@echo "" make generate-ts - Generate TypeScript types
# Start the database
db-start:
@ -88,21 +90,15 @@ db-drop-users:
db-reinit:
@echo "Re-initializing the database..."
@PG_HOST=$(DB_HOST) PG_PORT=$(DB_PORT) PG_USER=$(DB_USER) PG_PASSWORD=$(DB_PASSWORD) PG_DBNAME=$(DB_NAME) go run cmd/migrate/main.go -create_db -drop_db
@echo "Database re-initialized"
# Generate swagger documentation
swagger:
@echo "Generating swagger documentation..."
@swag init -g cmd/api/main.go
@echo "Swagger documentation generated"
# Generate TypeScript types
generate-ts:
@echo "Generating TypeScript types..."
@tygo generate
@echo "TypeScript types generated"
help:
@echo "Time Tracker Backend Makefile"
@echo ""
@echo "Usage:"
@echo " make db-start - Start the PostgreSQL database container"
@echo " make db-stop - Stop the PostgreSQL database container"
@echo " make db-test - Test the database connection"
@echo " make model-test - Test the database models"
@echo " make run - Run the application"
@echo " make build - Build the application"
@echo " make clean - Remove build artifacts"
@echo " make migrate - Run database migrations"
@echo " make seed - Seed the database with initial data"
@echo " make db-drop-users - Drop the users table"
@echo " make db-reinit - Re-initialize the database"
@echo " make help - Show this help message"

View File

@ -4112,10 +4112,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"billingRate": {
"type": "number"
"type": "number",
"example": 100
},
"name": {
"type": "string"
"type": "string",
"example": "Development"
}
}
},
@ -4123,22 +4125,28 @@ const docTemplate = `{
"type": "object",
"properties": {
"billingRate": {
"type": "number"
"type": "number",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "a1b2c3d4e5f6"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "u1v2w3x4y5z6"
},
"name": {
"type": "string"
"type": "string",
"example": "Development"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4146,22 +4154,28 @@ const docTemplate = `{
"type": "object",
"properties": {
"billingRate": {
"type": "number"
"type": "number",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "a1b2c3d4e5f6"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "u1v2w3x4y5z6"
},
"name": {
"type": "string"
"type": "string",
"example": "Development"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4169,7 +4183,8 @@ const docTemplate = `{
"type": "object",
"properties": {
"name": {
"type": "string"
"type": "string",
"example": "Acme Corp"
}
}
},
@ -4177,19 +4192,24 @@ const docTemplate = `{
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Acme Corp"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4197,19 +4217,24 @@ const docTemplate = `{
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Acme Corp"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4217,10 +4242,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "John Doe"
}
}
},
@ -4228,22 +4255,28 @@ const docTemplate = `{
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "John Doe"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4251,22 +4284,28 @@ const docTemplate = `{
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "John Doe"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4274,10 +4313,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"email": {
"type": "string"
"type": "string",
"example": "admin@example.com"
},
"password": {
"type": "string"
"type": "string",
"example": "Admin@123456"
}
}
},
@ -4285,10 +4326,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"customerId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Time Tracking App"
}
}
},
@ -4296,22 +4339,28 @@ const docTemplate = `{
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"customerId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Time Tracking App"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4319,22 +4368,28 @@ const docTemplate = `{
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"customerId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Time Tracking App"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4342,26 +4397,33 @@ const docTemplate = `{
"type": "object",
"properties": {
"activityId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"billable": {
"description": "Percentage (0-100)",
"type": "integer"
"type": "integer",
"example": 100
},
"description": {
"type": "string"
"type": "string",
"example": "Working on the Time Tracking App"
},
"end": {
"type": "string"
"type": "string",
"example": "2024-01-01T17:00:00Z"
},
"projectId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"start": {
"type": "string"
"type": "string",
"example": "2024-01-01T08:00:00Z"
},
"userId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
}
}
},
@ -4369,38 +4431,49 @@ const docTemplate = `{
"type": "object",
"properties": {
"activityId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"billable": {
"description": "Percentage (0-100)",
"type": "integer"
"type": "integer",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"description": {
"type": "string"
"type": "string",
"example": "Working on the Time Tracking App"
},
"end": {
"type": "string"
"type": "string",
"example": "2024-01-01T17:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"projectId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"start": {
"type": "string"
"type": "string",
"example": "2024-01-01T08:00:00Z"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"userId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
}
}
},
@ -4408,38 +4481,49 @@ const docTemplate = `{
"type": "object",
"properties": {
"activityId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"billable": {
"description": "Percentage (0-100)",
"type": "integer"
"type": "integer",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"description": {
"type": "string"
"type": "string",
"example": "Working on the Time Tracking App"
},
"end": {
"type": "string"
"type": "string",
"example": "2024-01-01T17:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"projectId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"start": {
"type": "string"
"type": "string",
"example": "2024-01-01T08:00:00Z"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"userId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
}
}
},
@ -4447,7 +4531,8 @@ const docTemplate = `{
"type": "object",
"properties": {
"token": {
"type": "string"
"type": "string",
"example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
},
"user": {
"$ref": "#/definitions/dto.UserDto"
@ -4458,19 +4543,24 @@ const docTemplate = `{
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"email": {
"type": "string"
"type": "string",
"example": "test@example.com"
},
"hourlyRate": {
"type": "number"
"type": "number",
"example": 50
},
"password": {
"type": "string"
"type": "string",
"example": "password123"
},
"role": {
"type": "string"
"type": "string",
"example": "admin"
}
}
},
@ -4478,28 +4568,36 @@ const docTemplate = `{
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"email": {
"type": "string"
"type": "string",
"example": "test@example.com"
},
"hourlyRate": {
"type": "number"
"type": "number",
"example": 50
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"role": {
"type": "string"
"type": "string",
"example": "admin"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4507,31 +4605,40 @@ const docTemplate = `{
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"email": {
"type": "string"
"type": "string",
"example": "test@example.com"
},
"hourlyRate": {
"type": "number"
"type": "number",
"example": 50
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"password": {
"type": "string"
"type": "string",
"example": "password123"
},
"role": {
"type": "string"
"type": "string",
"example": "admin"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},

View File

@ -4106,10 +4106,12 @@
"type": "object",
"properties": {
"billingRate": {
"type": "number"
"type": "number",
"example": 100
},
"name": {
"type": "string"
"type": "string",
"example": "Development"
}
}
},
@ -4117,22 +4119,28 @@
"type": "object",
"properties": {
"billingRate": {
"type": "number"
"type": "number",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "a1b2c3d4e5f6"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "u1v2w3x4y5z6"
},
"name": {
"type": "string"
"type": "string",
"example": "Development"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4140,22 +4148,28 @@
"type": "object",
"properties": {
"billingRate": {
"type": "number"
"type": "number",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "a1b2c3d4e5f6"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "u1v2w3x4y5z6"
},
"name": {
"type": "string"
"type": "string",
"example": "Development"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4163,7 +4177,8 @@
"type": "object",
"properties": {
"name": {
"type": "string"
"type": "string",
"example": "Acme Corp"
}
}
},
@ -4171,19 +4186,24 @@
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Acme Corp"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4191,19 +4211,24 @@
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Acme Corp"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4211,10 +4236,12 @@
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "John Doe"
}
}
},
@ -4222,22 +4249,28 @@
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "John Doe"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4245,22 +4278,28 @@
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "John Doe"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4268,10 +4307,12 @@
"type": "object",
"properties": {
"email": {
"type": "string"
"type": "string",
"example": "admin@example.com"
},
"password": {
"type": "string"
"type": "string",
"example": "Admin@123456"
}
}
},
@ -4279,10 +4320,12 @@
"type": "object",
"properties": {
"customerId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Time Tracking App"
}
}
},
@ -4290,22 +4333,28 @@
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"customerId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Time Tracking App"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4313,22 +4362,28 @@
"type": "object",
"properties": {
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"customerId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"name": {
"type": "string"
"type": "string",
"example": "Time Tracking App"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4336,26 +4391,33 @@
"type": "object",
"properties": {
"activityId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"billable": {
"description": "Percentage (0-100)",
"type": "integer"
"type": "integer",
"example": 100
},
"description": {
"type": "string"
"type": "string",
"example": "Working on the Time Tracking App"
},
"end": {
"type": "string"
"type": "string",
"example": "2024-01-01T17:00:00Z"
},
"projectId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"start": {
"type": "string"
"type": "string",
"example": "2024-01-01T08:00:00Z"
},
"userId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
}
}
},
@ -4363,38 +4425,49 @@
"type": "object",
"properties": {
"activityId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"billable": {
"description": "Percentage (0-100)",
"type": "integer"
"type": "integer",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"description": {
"type": "string"
"type": "string",
"example": "Working on the Time Tracking App"
},
"end": {
"type": "string"
"type": "string",
"example": "2024-01-01T17:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"projectId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"start": {
"type": "string"
"type": "string",
"example": "2024-01-01T08:00:00Z"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"userId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
}
}
},
@ -4402,38 +4475,49 @@
"type": "object",
"properties": {
"activityId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"billable": {
"description": "Percentage (0-100)",
"type": "integer"
"type": "integer",
"example": 100
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"description": {
"type": "string"
"type": "string",
"example": "Working on the Time Tracking App"
},
"end": {
"type": "string"
"type": "string",
"example": "2024-01-01T17:00:00Z"
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"projectId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"start": {
"type": "string"
"type": "string",
"example": "2024-01-01T08:00:00Z"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"userId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
}
}
},
@ -4441,7 +4525,8 @@
"type": "object",
"properties": {
"token": {
"type": "string"
"type": "string",
"example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
},
"user": {
"$ref": "#/definitions/dto.UserDto"
@ -4452,19 +4537,24 @@
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"email": {
"type": "string"
"type": "string",
"example": "test@example.com"
},
"hourlyRate": {
"type": "number"
"type": "number",
"example": 50
},
"password": {
"type": "string"
"type": "string",
"example": "password123"
},
"role": {
"type": "string"
"type": "string",
"example": "admin"
}
}
},
@ -4472,28 +4562,36 @@
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"email": {
"type": "string"
"type": "string",
"example": "test@example.com"
},
"hourlyRate": {
"type": "number"
"type": "number",
"example": 50
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"role": {
"type": "string"
"type": "string",
"example": "admin"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},
@ -4501,31 +4599,40 @@
"type": "object",
"properties": {
"companyId": {
"type": "integer"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"createdAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
},
"email": {
"type": "string"
"type": "string",
"example": "test@example.com"
},
"hourlyRate": {
"type": "number"
"type": "number",
"example": 50
},
"id": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"lastEditorID": {
"type": "string"
"type": "string",
"example": "01HGW2BBG0000000000000000"
},
"password": {
"type": "string"
"type": "string",
"example": "password123"
},
"role": {
"type": "string"
"type": "string",
"example": "admin"
},
"updatedAt": {
"type": "string"
"type": "string",
"example": "2024-01-01T00:00:00Z"
}
}
},

View File

@ -3,225 +3,310 @@ definitions:
dto.ActivityCreateDto:
properties:
billingRate:
example: 100
type: number
name:
example: Development
type: string
type: object
dto.ActivityDto:
properties:
billingRate:
example: 100
type: number
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
id:
example: a1b2c3d4e5f6
type: string
lastEditorID:
example: u1v2w3x4y5z6
type: string
name:
example: Development
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.ActivityUpdateDto:
properties:
billingRate:
example: 100
type: number
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
id:
example: a1b2c3d4e5f6
type: string
lastEditorID:
example: u1v2w3x4y5z6
type: string
name:
example: Development
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.CompanyCreateDto:
properties:
name:
example: Acme Corp
type: string
type: object
dto.CompanyDto:
properties:
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
name:
example: Acme Corp
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.CompanyUpdateDto:
properties:
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
name:
example: Acme Corp
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.CustomerCreateDto:
properties:
companyId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
name:
example: John Doe
type: string
type: object
dto.CustomerDto:
properties:
companyId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
name:
example: John Doe
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.CustomerUpdateDto:
properties:
companyId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
name:
example: John Doe
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.LoginDto:
properties:
email:
example: admin@example.com
type: string
password:
example: Admin@123456
type: string
type: object
dto.ProjectCreateDto:
properties:
customerId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
name:
example: Time Tracking App
type: string
type: object
dto.ProjectDto:
properties:
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
customerId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
name:
example: Time Tracking App
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.ProjectUpdateDto:
properties:
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
customerId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
name:
example: Time Tracking App
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.TimeEntryCreateDto:
properties:
activityId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
billable:
description: Percentage (0-100)
example: 100
type: integer
description:
example: Working on the Time Tracking App
type: string
end:
example: "2024-01-01T17:00:00Z"
type: string
projectId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
start:
example: "2024-01-01T08:00:00Z"
type: string
userId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
type: object
dto.TimeEntryDto:
properties:
activityId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
billable:
description: Percentage (0-100)
example: 100
type: integer
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
description:
example: Working on the Time Tracking App
type: string
end:
example: "2024-01-01T17:00:00Z"
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
projectId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
start:
example: "2024-01-01T08:00:00Z"
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
userId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
type: object
dto.TimeEntryUpdateDto:
properties:
activityId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
billable:
description: Percentage (0-100)
example: 100
type: integer
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
description:
example: Working on the Time Tracking App
type: string
end:
example: "2024-01-01T17:00:00Z"
type: string
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
projectId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
start:
example: "2024-01-01T08:00:00Z"
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
userId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
type: object
dto.TokenDto:
properties:
token:
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
type: string
user:
$ref: '#/definitions/dto.UserDto'
@ -229,54 +314,76 @@ definitions:
dto.UserCreateDto:
properties:
companyId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
email:
example: test@example.com
type: string
hourlyRate:
example: 50
type: number
password:
example: password123
type: string
role:
example: admin
type: string
type: object
dto.UserDto:
properties:
companyId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
email:
example: test@example.com
type: string
hourlyRate:
example: 50
type: number
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
role:
example: admin
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
dto.UserUpdateDto:
properties:
companyId:
type: integer
example: 01HGW2BBG0000000000000000
type: string
createdAt:
example: "2024-01-01T00:00:00Z"
type: string
email:
example: test@example.com
type: string
hourlyRate:
example: 50
type: number
id:
example: 01HGW2BBG0000000000000000
type: string
lastEditorID:
example: 01HGW2BBG0000000000000000
type: string
password:
example: password123
type: string
role:
example: admin
type: string
updatedAt:
example: "2024-01-01T00:00:00Z"
type: string
type: object
utils.ErrorInfo:

View File

@ -5,24 +5,24 @@ import (
)
type ActivityDto struct {
ID string `json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
LastEditorID string `json:"lastEditorID"`
Name string `json:"name"`
BillingRate float64 `json:"billingRate"`
ID string `json:"id" example:"a1b2c3d4e5f6"`
CreatedAt time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID string `json:"lastEditorID" example:"u1v2w3x4y5z6"`
Name string `json:"name" example:"Development"`
BillingRate float64 `json:"billingRate" example:"100.00"`
}
type ActivityCreateDto struct {
Name string `json:"name"`
BillingRate float64 `json:"billingRate"`
Name string `json:"name" example:"Development"`
BillingRate float64 `json:"billingRate" example:"100.00"`
}
type ActivityUpdateDto struct {
ID string `json:"id"`
CreatedAt *time.Time `json:"createdAt"`
UpdatedAt *time.Time `json:"updatedAt"`
LastEditorID *string `json:"lastEditorID"`
Name *string `json:"name"`
BillingRate *float64 `json:"billingRate"`
ID string `json:"id" example:"a1b2c3d4e5f6"`
CreatedAt *time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt *time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID *string `json:"lastEditorID" example:"u1v2w3x4y5z6"`
Name *string `json:"name" example:"Development"`
BillingRate *float64 `json:"billingRate" example:"100.00"`
}

View File

@ -2,12 +2,12 @@ package dto
// LoginDto represents the login request
type LoginDto struct {
Email string `json:"email"`
Password string `json:"password"`
Email string `json:"email" example:"admin@example.com"`
Password string `json:"password" example:"Admin@123456"`
}
// TokenDto represents the response after successful authentication
type TokenDto struct {
Token string `json:"token"`
Token string `json:"token" example:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"`
User UserDto `json:"user"`
}

View File

@ -5,21 +5,21 @@ import (
)
type CompanyDto struct {
ID string `json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
LastEditorID string `json:"lastEditorID"`
Name string `json:"name"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Name string `json:"name" example:"Acme Corp"`
}
type CompanyCreateDto struct {
Name string `json:"name"`
Name string `json:"name" example:"Acme Corp"`
}
type CompanyUpdateDto struct {
ID string `json:"id"`
CreatedAt *time.Time `json:"createdAt"`
UpdatedAt *time.Time `json:"updatedAt"`
LastEditorID *string `json:"lastEditorID"`
Name *string `json:"name"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt *time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt *time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID *string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Name *string `json:"name" example:"Acme Corp"`
}

View File

@ -5,24 +5,24 @@ import (
)
type CustomerDto struct {
ID string `json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
LastEditorID string `json:"lastEditorID"`
Name string `json:"name"`
CompanyID string `json:"companyId"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Name string `json:"name" example:"John Doe"`
CompanyID string `json:"companyId" example:"01HGW2BBG0000000000000000"`
}
type CustomerCreateDto struct {
Name string `json:"name"`
CompanyID string `json:"companyId"`
Name string `json:"name" example:"John Doe"`
CompanyID string `json:"companyId" example:"01HGW2BBG0000000000000000"`
}
type CustomerUpdateDto struct {
ID string `json:"id"`
CreatedAt *time.Time `json:"createdAt"`
UpdatedAt *time.Time `json:"updatedAt"`
LastEditorID *string `json:"lastEditorID"`
Name *string `json:"name"`
CompanyID *string `json:"companyId"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt *time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt *time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID *string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Name *string `json:"name" example:"John Doe"`
CompanyID *string `json:"companyId" example:"01HGW2BBG0000000000000000"`
}

View File

@ -5,24 +5,24 @@ import (
)
type ProjectDto struct {
ID string `json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
LastEditorID string `json:"lastEditorID"`
Name string `json:"name"`
CustomerID string `json:"customerId"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Name string `json:"name" example:"Time Tracking App"`
CustomerID string `json:"customerId" example:"01HGW2BBG0000000000000000"`
}
type ProjectCreateDto struct {
Name string `json:"name"`
CustomerID string `json:"customerId"`
Name string `json:"name" example:"Time Tracking App"`
CustomerID string `json:"customerId" example:"01HGW2BBG0000000000000000"`
}
type ProjectUpdateDto struct {
ID string `json:"id"`
CreatedAt *time.Time `json:"createdAt"`
UpdatedAt *time.Time `json:"updatedAt"`
LastEditorID *string `json:"lastEditorID"`
Name *string `json:"name"`
CustomerID *string `json:"customerId"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt *time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt *time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID *string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Name *string `json:"name" example:"Time Tracking App"`
CustomerID *string `json:"customerId" example:"01HGW2BBG0000000000000000"`
}

View File

@ -5,39 +5,39 @@ import (
)
type TimeEntryDto struct {
ID string `json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
LastEditorID string `json:"lastEditorID"`
UserID string `json:"userId"`
ProjectID string `json:"projectId"`
ActivityID string `json:"activityId"`
Start time.Time `json:"start"`
End time.Time `json:"end"`
Description string `json:"description"`
Billable int `json:"billable"` // Percentage (0-100)
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
UserID string `json:"userId" example:"01HGW2BBG0000000000000000"`
ProjectID string `json:"projectId" example:"01HGW2BBG0000000000000000"`
ActivityID string `json:"activityId" example:"01HGW2BBG0000000000000000"`
Start time.Time `json:"start" example:"2024-01-01T08:00:00Z"`
End time.Time `json:"end" example:"2024-01-01T17:00:00Z"`
Description string `json:"description" example:"Working on the Time Tracking App"`
Billable int `json:"billable" example:"100"` // Percentage (0-100)
}
type TimeEntryCreateDto struct {
UserID string `json:"userId"`
ProjectID string `json:"projectId"`
ActivityID string `json:"activityId"`
Start time.Time `json:"start"`
End time.Time `json:"end"`
Description string `json:"description"`
Billable int `json:"billable"` // Percentage (0-100)
UserID string `json:"userId" example:"01HGW2BBG0000000000000000"`
ProjectID string `json:"projectId" example:"01HGW2BBG0000000000000000"`
ActivityID string `json:"activityId" example:"01HGW2BBG0000000000000000"`
Start time.Time `json:"start" example:"2024-01-01T08:00:00Z"`
End time.Time `json:"end" example:"2024-01-01T17:00:00Z"`
Description string `json:"description" example:"Working on the Time Tracking App"`
Billable int `json:"billable" example:"100"` // Percentage (0-100)
}
type TimeEntryUpdateDto struct {
ID string `json:"id"`
CreatedAt *time.Time `json:"createdAt"`
UpdatedAt *time.Time `json:"updatedAt"`
LastEditorID *string `json:"lastEditorID"`
UserID *string `json:"userId"`
ProjectID *string `json:"projectId"`
ActivityID *string `json:"activityId"`
Start *time.Time `json:"start"`
End *time.Time `json:"end"`
Description *string `json:"description"`
Billable *int `json:"billable"` // Percentage (0-100)
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt *time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt *time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID *string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
UserID *string `json:"userId" example:"01HGW2BBG0000000000000000"`
ProjectID *string `json:"projectId" example:"01HGW2BBG0000000000000000"`
ActivityID *string `json:"activityId" example:"01HGW2BBG0000000000000000"`
Start *time.Time `json:"start" example:"2024-01-01T08:00:00Z"`
End *time.Time `json:"end" example:"2024-01-01T17:00:00Z"`
Description *string `json:"description" example:"Working on the Time Tracking App"`
Billable *int `json:"billable" example:"100"` // Percentage (0-100)
}

View File

@ -5,32 +5,32 @@ import (
)
type UserDto struct {
ID string `json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
LastEditorID string `json:"lastEditorID"`
Email string `json:"email"`
Role string `json:"role"`
CompanyID string `json:"companyId"`
HourlyRate float64 `json:"hourlyRate"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Email string `json:"email" example:"test@example.com"`
Role string `json:"role" example:"admin"`
CompanyID string `json:"companyId" example:"01HGW2BBG0000000000000000"`
HourlyRate float64 `json:"hourlyRate" example:"50.00"`
}
type UserCreateDto struct {
Email string `json:"email"`
Password string `json:"password"`
Role string `json:"role"`
CompanyID string `json:"companyId"`
HourlyRate float64 `json:"hourlyRate"`
Email string `json:"email" example:"test@example.com"`
Password string `json:"password" example:"password123"`
Role string `json:"role" example:"admin"`
CompanyID string `json:"companyId" example:"01HGW2BBG0000000000000000"`
HourlyRate float64 `json:"hourlyRate" example:"50.00"`
}
type UserUpdateDto struct {
ID string `json:"id"`
CreatedAt *time.Time `json:"createdAt"`
UpdatedAt *time.Time `json:"updatedAt"`
LastEditorID *string `json:"lastEditorID"`
Email *string `json:"email"`
Password *string `json:"password"`
Role *string `json:"role"`
CompanyID *string `json:"companyId"`
HourlyRate *float64 `json:"hourlyRate"`
ID string `json:"id" example:"01HGW2BBG0000000000000000"`
CreatedAt *time.Time `json:"createdAt" example:"2024-01-01T00:00:00Z"`
UpdatedAt *time.Time `json:"updatedAt" example:"2024-01-01T00:00:00Z"`
LastEditorID *string `json:"lastEditorID" example:"01HGW2BBG0000000000000000"`
Email *string `json:"email" example:"test@example.com"`
Password *string `json:"password" example:"password123"`
Role *string `json:"role" example:"admin"`
CompanyID *string `json:"companyId" example:"01HGW2BBG0000000000000000"`
HourlyRate *float64 `json:"hourlyRate" example:"50.00"`
}

View File

@ -1,5 +1,5 @@
packages:
- path: github.com/timetracker/backend/dto
- path: github.com/timetracker/backend/internal/dtos
type_mappings:
"time.Time": "string"
"ulid.ULID": "string"

View File

@ -1,17 +0,0 @@
# Deployment and DevOps
## Containerization
- Docker containers for backend and frontend
- Docker Compose for development environment
- Kubernetes manifests for production environment
## CI/CD Pipeline
- Automated tests (Unit, Integration, E2E)
- Automated deployment
- Version management
## Monitoring and Logging
- Prometheus for metrics
- Grafana for visualization
- ELK Stack or similar for logging
- Alerting for critical events

View File

@ -24,6 +24,24 @@ export interface ActivityUpdateDto {
billingRate?: number /* float64 */;
}
//////////
// source: auth_dto.go
/**
* LoginDto represents the login request
*/
export interface LoginDto {
email: string;
password: string;
}
/**
* TokenDto represents the response after successful authentication
*/
export interface TokenDto {
token: string;
user: UserDto;
}
//////////
// source: company_dto.go
@ -54,11 +72,11 @@ export interface CustomerDto {
updatedAt: string;
lastEditorID: string;
name: string;
companyId: number /* int */;
companyId: string;
}
export interface CustomerCreateDto {
name: string;
companyId: number /* int */;
companyId: string;
}
export interface CustomerUpdateDto {
id: string;
@ -66,7 +84,7 @@ export interface CustomerUpdateDto {
updatedAt?: string;
lastEditorID?: string;
name?: string;
companyId?: number /* int */;
companyId?: string;
}
//////////
@ -78,11 +96,11 @@ export interface ProjectDto {
updatedAt: string;
lastEditorID: string;
name: string;
customerId: number /* int */;
customerId: string;
}
export interface ProjectCreateDto {
name: string;
customerId: number /* int */;
customerId: string;
}
export interface ProjectUpdateDto {
id: string;
@ -90,7 +108,7 @@ export interface ProjectUpdateDto {
updatedAt?: string;
lastEditorID?: string;
name?: string;
customerId?: number /* int */;
customerId?: string;
}
//////////
@ -101,18 +119,18 @@ export interface TimeEntryDto {
createdAt: string;
updatedAt: string;
lastEditorID: string;
userId: number /* int */;
projectId: number /* int */;
activityId: number /* int */;
userId: string;
projectId: string;
activityId: string;
start: string;
end: string;
description: string;
billable: number /* int */; // Percentage (0-100)
}
export interface TimeEntryCreateDto {
userId: number /* int */;
projectId: number /* int */;
activityId: number /* int */;
userId: string;
projectId: string;
activityId: string;
start: string;
end: string;
description: string;
@ -123,9 +141,9 @@ export interface TimeEntryUpdateDto {
createdAt?: string;
updatedAt?: string;
lastEditorID?: string;
userId?: number /* int */;
projectId?: number /* int */;
activityId?: number /* int */;
userId?: string;
projectId?: string;
activityId?: string;
start?: string;
end?: string;
description?: string;
@ -141,16 +159,15 @@ export interface UserDto {
updatedAt: string;
lastEditorID: string;
email: string;
password: string; // Note: In a real application, you would NEVER send the password in a DTO. This is just for demonstration.
role: string;
companyId: number /* int */;
companyId: string;
hourlyRate: number /* float64 */;
}
export interface UserCreateDto {
email: string;
password: string; // Note: In a real application, you would NEVER send the password in a DTO. This is just for demonstration.
password: string;
role: string;
companyId: number /* int */;
companyId: string;
hourlyRate: number /* float64 */;
}
export interface UserUpdateDto {
@ -159,8 +176,8 @@ export interface UserUpdateDto {
updatedAt?: string;
lastEditorID?: string;
email?: string;
password?: string; // Note: In a real application, you would NEVER send the password in a DTO. This is just for demonstration.
password?: string;
role?: string;
companyId?: number /* int */;
companyId?: string;
hourlyRate?: number /* float64 */;
}