diff --git a/backend/Makefile b/backend/Makefile index 39b3e5b..a3eb15b 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -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,6 +25,7 @@ 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" # Start the database @@ -88,7 +89,12 @@ 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" + help: @echo "Time Tracker Backend Makefile" diff --git a/backend/docs/docs.go b/backend/docs/docs.go index b5d96e5..45897b4 100644 --- a/backend/docs/docs.go +++ b/backend/docs/docs.go @@ -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" } } }, diff --git a/backend/docs/swagger.json b/backend/docs/swagger.json index d03493b..6679ba6 100644 --- a/backend/docs/swagger.json +++ b/backend/docs/swagger.json @@ -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" } } }, diff --git a/backend/docs/swagger.yaml b/backend/docs/swagger.yaml index b51f240..5527f46 100644 --- a/backend/docs/swagger.yaml +++ b/backend/docs/swagger.yaml @@ -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: diff --git a/backend/internal/dtos/activity_dto.go b/backend/internal/dtos/activity_dto.go index 93c0be2..c538808 100644 --- a/backend/internal/dtos/activity_dto.go +++ b/backend/internal/dtos/activity_dto.go @@ -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"` } diff --git a/backend/internal/dtos/auth_dto.go b/backend/internal/dtos/auth_dto.go index a345bb3..9a17e1c 100644 --- a/backend/internal/dtos/auth_dto.go +++ b/backend/internal/dtos/auth_dto.go @@ -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"` } diff --git a/backend/internal/dtos/company_dto.go b/backend/internal/dtos/company_dto.go index 6dea5a1..e55746b 100644 --- a/backend/internal/dtos/company_dto.go +++ b/backend/internal/dtos/company_dto.go @@ -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"` } diff --git a/backend/internal/dtos/customer_dto.go b/backend/internal/dtos/customer_dto.go index 9caf88e..b7601ae 100644 --- a/backend/internal/dtos/customer_dto.go +++ b/backend/internal/dtos/customer_dto.go @@ -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"` } diff --git a/backend/internal/dtos/project_dto.go b/backend/internal/dtos/project_dto.go index d078bff..f88f7f2 100644 --- a/backend/internal/dtos/project_dto.go +++ b/backend/internal/dtos/project_dto.go @@ -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"` } diff --git a/backend/internal/dtos/timeentry_dto.go b/backend/internal/dtos/timeentry_dto.go index 5b8cf09..915a921 100644 --- a/backend/internal/dtos/timeentry_dto.go +++ b/backend/internal/dtos/timeentry_dto.go @@ -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) } diff --git a/backend/internal/dtos/user_dto.go b/backend/internal/dtos/user_dto.go index b684c7b..072970e 100644 --- a/backend/internal/dtos/user_dto.go +++ b/backend/internal/dtos/user_dto.go @@ -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"` }