basePath: / definitions: dto.AssignWorkerRequest: properties: admin_notes: type: string deadline: type: string report_id: type: string worker_id: type: string required: - report_id - worker_id type: object dto.AssignedWorkerResponse: properties: latitude: type: number longitude: type: number road_name: type: string status: type: string worker_name: type: string type: object dto.AuthResponse: properties: token: type: string type: object dto.GoogleAuthRequest: properties: idToken: type: string required: - idToken type: object dto.GoogleAuthResponse: properties: token: type: string user: $ref: '#/definitions/dto.GoogleUserDetails' type: object dto.GoogleUserDetails: properties: email: type: string fullname: type: string isNewUser: type: boolean type: object dto.LoginRequest: properties: email: type: string password: type: string required: - email - password type: object dto.PaginatedReportsResponse: properties: limit: type: integer page: type: integer reports: items: $ref: '#/definitions/dto.UserReportResponse' type: array total_count: type: integer total_pages: type: integer type: object dto.RegisterRequest: properties: email: type: string fullname: type: string password: minLength: 6 type: string username: type: string required: - email - fullname - password - username type: object dto.ReportLocationResponse: properties: destruct_class: type: string id: type: string latitude: type: number longitude: type: number total_score: type: number type: object dto.ReportResponse: properties: after_image_url: type: string before_image_url: type: string description: type: string destruct_class: type: string id: type: string latitude: type: number location_score: type: number longitude: type: number road_name: type: string status: type: string total_score: type: number user_id: type: string type: object dto.UserReportResponse: properties: admin_notes: type: string after_image_url: type: string before_image_url: type: string created_at: type: string deadline: type: string description: type: string destruct_class: type: string id: type: string latitude: type: number location_score: type: number longitude: type: number road_name: type: string status: type: string total_score: type: number type: object dto.UserResponse: properties: email: type: string fullname: type: string id: type: string role: type: string username: type: string verified: type: boolean type: object dto.VerifyOTPRequest: properties: email: type: string otp: type: string required: - email - otp type: object dto.VerifyReportRequest: properties: report_id: type: string required: - report_id type: object host: localhost:8080 info: contact: email: support@dinacom.com name: API Support description: Backend service for Dinacom 11.0 Hackathon license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: http://swagger.io/terms/ title: Dinacom 11.0 Backend API version: "1.0" paths: /api/admin/report/assign: get: description: Get all workers with assigned reports produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/dto.AssignedWorkerResponse' type: array "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get Assigned Workers tags: - Admin patch: consumes: - application/json description: Admin assigns a worker to a report parameters: - description: Assign Worker Request in: body name: request required: true schema: $ref: '#/definitions/dto.AssignWorkerRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Assign Worker to Report tags: - Admin /api/admin/report/verify: patch: consumes: - application/json description: Admin verifies a report with status 'Finish by Worker' to 'finished' parameters: - description: Verify Report Request in: body name: request required: true schema: $ref: '#/definitions/dto.VerifyReportRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Verify Report by Admin tags: - Admin /api/auth/admin/login: post: consumes: - application/json description: Login for admins parameters: - description: Login Request in: body name: request required: true schema: $ref: '#/definitions/dto.LoginRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AuthResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Login Admin tags: - Auth /api/auth/admin/users: get: description: Get all users (Admin only) produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/dto.UserResponse' type: array "403": description: Forbidden schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get All Users tags: - Admin /api/auth/admin/workers: get: description: Get all workers (Admin only) produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/dto.UserResponse' type: array "403": description: Forbidden schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get All Workers tags: - Admin /api/auth/google: post: consumes: - application/json description: Authenticate with Google ID token and get JWT parameters: - description: Google Auth Request in: body name: request required: true schema: $ref: '#/definitions/dto.GoogleAuthRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.GoogleAuthResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Google Authentication tags: - Auth /api/auth/me: get: description: Get current user's profile produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.UserResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get Profile tags: - Auth /api/auth/user/login: post: consumes: - application/json description: Login for users parameters: - description: Login Request in: body name: request required: true schema: $ref: '#/definitions/dto.LoginRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AuthResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Login User tags: - Auth /api/auth/user/register: post: consumes: - application/json description: Register a new user with email verification via OTP parameters: - description: Register Request in: body name: request required: true schema: $ref: '#/definitions/dto.RegisterRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Register a new user tags: - Auth /api/auth/user/verify-otp: post: consumes: - application/json description: Verify OTP to activate user account and get access token parameters: - description: Verify OTP Request in: body name: request required: true schema: $ref: '#/definitions/dto.VerifyOTPRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AuthResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Verify OTP tags: - Auth /api/auth/worker/login: post: consumes: - application/json description: Login for workers parameters: - description: Login Request in: body name: request required: true schema: $ref: '#/definitions/dto.LoginRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AuthResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Login Worker tags: - Auth /api/get_report: get: description: Get all completed reports with non-good destruct class produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/dto.ReportLocationResponse' type: array "500": description: Internal Server Error schema: additionalProperties: type: string type: object summary: Get Reports tags: - Report /api/user/report: post: consumes: - multipart/form-data description: Submit a new report with image and location data parameters: - description: Image file (JPG, PNG, JPEG, max 32MB) in: formData name: files required: true type: file - default: '{"longitude": 106.816666, "latitude": -6.200000, "road_name": "Jalan Sudirman", "description": "Lubang besar di tengah jalan"}' description: JSON data in: formData name: json required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.ReportResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Create Report tags: - Report /api/user/report/me: get: description: Get all reports created by the logged-in user with pagination parameters: - default: 1 description: Page number in: query name: page type: integer - default: 10 description: Items per page in: query name: limit type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.PaginatedReportsResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get User's Reports tags: - User /api/worker/report: patch: consumes: - multipart/form-data description: Worker uploads after image and marks report as finished parameters: - description: After image file in: formData name: files required: true type: file - default: '{"report_id": "uuid-here"}' description: JSON data in: formData name: json required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Finish Report by Worker tags: - Worker /api/worker/report/assign/me: get: description: Get all reports assigned to the logged-in worker with pagination parameters: - default: 1 description: Page number in: query name: page type: integer - default: 10 description: Items per page in: query name: limit type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.PaginatedReportsResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get Worker's Assigned Reports tags: - Worker /api/worker/report/history/me: get: description: Get worker's completed reports with pagination and status filter parameters: - default: 1 description: Page number in: query name: page type: integer - default: 10 description: Items per page in: query name: limit type: integer - default: false description: 'True: finished, False: Finish by Worker' in: query name: verify_admin type: boolean produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.PaginatedReportsResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get Worker's History tags: - Worker securityDefinitions: BearerAuth: description: Type "Bearer" followed by a space and JWT token. in: header name: Authorization type: apiKey swagger: "2.0"