refactor: improve handling of optional CustomerID in project models and DTOs
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled

This commit is contained in:
2025-04-01 15:48:43 +00:00
parent a9c7598862
commit 4b47da3673
13 changed files with 1446 additions and 28 deletions
@@ -0,0 +1,168 @@
{
"info": {
"_postman_id": "YOUR_POSTMAN_ID",
"name": "Activity API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET /api/activities",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/activities",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"activities"
]
}
},
"response": []
},
{
"name": "GET /api/activities/:id",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/activities/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"activities",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "POST /api/activities",
"request": {
"method": "POST",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\",\n\t\"billingRate\": 0\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/activities",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"activities"
]
}
},
"response": []
},
{
"name": "PUT /api/activities/:id",
"request": {
"method": "PUT",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\",\n\t\"billingRate\": 0\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/activities/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"activities",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "DELETE /api/activities/:id",
"request": {
"method": "DELETE",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/activities/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"activities",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
}
]
}
@@ -0,0 +1,168 @@
{
"info": {
"_postman_id": "YOUR_POSTMAN_ID",
"name": "Company API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET /api/companies",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/companies",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"companies"
]
}
},
"response": []
},
{
"name": "GET /api/companies/:id",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/companies/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"companies",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "POST /api/companies",
"request": {
"method": "POST",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/companies",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"companies"
]
}
},
"response": []
},
{
"name": "PUT /api/companies/:id",
"request": {
"method": "PUT",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/companies/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"companies",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "DELETE /api/companies/:id",
"request": {
"method": "DELETE",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/companies/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"companies",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
}
]
}
@@ -0,0 +1,200 @@
{
"info": {
"_postman_id": "YOUR_POSTMAN_ID",
"name": "Customer API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET /api/customers",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/customers",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"customers"
]
}
},
"response": []
},
{
"name": "GET /api/customers/:id",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/customers/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"customers",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "GET /api/customers/company/:companyId",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/customers/company/:companyId",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"customers",
"company",
":companyId"
],
"variable": [
{
"key": "companyId",
"value": ""
}
]
}
},
"response": []
},
{
"name": "POST /api/customers",
"request": {
"method": "POST",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\",\n\t\"companyId\": \"\",\n\t\"ownerUserID\": \"\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/customers",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"customers"
]
}
},
"response": []
},
{
"name": "PUT /api/customers/:id",
"request": {
"method": "PUT",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\",\n\t\"companyId\": \"\",\n\t\"ownerUserID\": \"\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/customers/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"customers",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "DELETE /api/customers/:id",
"request": {
"method": "DELETE",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/customers/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"customers",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
}
]
}
@@ -0,0 +1,225 @@
{
"info": {
"_postman_id": "YOUR_POSTMAN_ID",
"name": "Project API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET /api/projects",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/projects",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"projects"
]
}
},
"response": []
},
{
"name": "GET /api/projects/with-customers",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/projects/with-customers",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"projects",
"with-customers"
]
}
},
"response": []
},
{
"name": "GET /api/projects/:id",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/projects/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"projects",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "GET /api/projects/customer/:customerId",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/projects/customer/:customerId",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"projects",
"customer",
":customerId"
],
"variable": [
{
"key": "customerId",
"value": ""
}
]
}
},
"response": []
},
{
"name": "POST /api/projects",
"request": {
"method": "POST",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\",\n\t\"customerId\": \"\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/projects",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"projects"
]
}
},
"response": []
},
{
"name": "PUT /api/projects/:id",
"request": {
"method": "PUT",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"\",\n\t\"customerId\": \"\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/projects/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"projects",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "DELETE /api/projects/:id",
"request": {
"method": "DELETE",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/projects/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"projects",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
}
]
}
@@ -0,0 +1,292 @@
{
"info": {
"_postman_id": "YOUR_POSTMAN_ID",
"name": "TimeEntry API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET /api/time-entries",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/time-entries",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries"
]
}
},
"response": []
},
{
"name": "GET /api/time-entries/me",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/time-entries/me",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries",
"me"
]
}
},
"response": []
},
{
"name": "GET /api/time-entries/range",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/time-entries/range?start=2023-01-01T00:00:00Z&end=2023-01-02T00:00:00Z",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries",
"range"
],
"query": [
{
"key": "start",
"value": "2023-01-01T00:00:00Z"
},
{
"key": "end",
"value": "2023-01-02T00:00:00Z"
}
]
}
},
"response": []
},
{
"name": "GET /api/time-entries/:id",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/time-entries/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "GET /api/time-entries/user/:userId",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/time-entries/user/:userId",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries",
"user",
":userId"
],
"variable": [
{
"key": "userId",
"value": ""
}
]
}
},
"response": []
},
{
"name": "GET /api/time-entries/project/:projectId",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/time-entries/project/:projectId",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries",
"project",
":projectId"
],
"variable": [
{
"key": "projectId",
"value": ""
}
]
}
},
"response": []
},
{
"name": "POST /api/time-entries",
"request": {
"method": "POST",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"userID\": \"\",\n \"projectID\": \"\",\n \"activityID\": \"\",\n \"start\": \"2023-01-01T00:00:00Z\",\n \"end\": \"2023-01-01T01:00:00Z\",\n \"description\": \"\",\n \"billable\": true\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/time-entries",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries"
]
}
},
"response": []
},
{
"name": "PUT /api/time-entries/:id",
"request": {
"method": "PUT",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"userID\": \"\",\n \"projectID\": \"\",\n \"activityID\": \"\",\n \"start\": \"2023-01-01T00:00:00Z\",\n \"end\": \"2023-01-01T01:00:00Z\",\n \"description\": \"\",\n \"billable\": true\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/time-entries/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
},
{
"name": "DELETE /api/time-entries/:id",
"request": {
"method": "DELETE",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/time-entries/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"time-entries",
":id"
],
"variable": [
{
"key": "id",
"value": ""
}
]
}
},
"response": []
}
]
}
@@ -0,0 +1,241 @@
{
"info": {
"_postman_id": "YOUR_POSTMAN_ID",
"name": "User API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Auth",
"item": [
{
"name": "POST /api/auth/login",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n\t\"email\": \"\",\n\t\"password\": \"\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/auth/login",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"auth",
"login"
]
}
},
"response": []
},
{
"name": "POST /api/auth/register",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n\t\"email\": \"\",\n\t\"password\": \"\",\n\t\"role\": \"user\",\n\t\"companyID\": \"\",\n\t\"hourlyRate\": 0\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/auth/register",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"auth",
"register"
]
}
},
"response": []
},
{
"name": "GET /api/auth/me",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/auth/me",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"auth",
"me"
]
}
},
"response": []
}
]
},
{
"name": "Users",
"item": [
{
"name": "GET /api/users",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/users",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"users"
]
}
},
"response": []
},
{
"name": "GET /api/users/:id",
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/users/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"users",
":id"
]
}
},
"response": []
},
{
"name": "POST /api/users",
"request": {
"method": "POST",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"email\": \"\",\n\t\"password\": \"\",\n\t\"role\": \"user\",\n\t\"companyID\": \"\",\n\t\"hourlyRate\": 0\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/users",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"users"
]
}
},
"response": []
},
{
"name": "PUT /api/users/:id",
"request": {
"method": "PUT",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"email\": \"\",\n\t\"password\": \"\",\n\t\"role\": \"user\",\n\t\"companyID\": \"\",\n\t\"hourlyRate\": 0\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{API_URL}}/api/users/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"users",
":id"
]
}
},
"response": []
},
{
"name": "DELETE /api/users/:id",
"request": {
"method": "DELETE",
"header": [
{
"key": "Authorization",
"value": "Bearer {{JWT_TOKEN}}",
"type": "text"
}
],
"url": {
"raw": "{{API_URL}}/api/users/:id",
"host": [
"{{API_URL}}"
],
"path": [
"api",
"users",
":id"
]
}
},
"response": []
}
]
}
]
}