diff --git a/internal/handlers/employee/employee.go b/internal/handlers/employee/employee.go index 836caed1..fb4ccd09 100644 --- a/internal/handlers/employee/employee.go +++ b/internal/handlers/employee/employee.go @@ -3,8 +3,7 @@ package handlers import ( "net/http" - "api-service/internal/models/employee" - + "api-service/internal/models" "github.com/gin-gonic/gin" "github.com/google/uuid" ) @@ -14,66 +13,70 @@ type EmployeeHandler struct{} // NewEmployeeHandler creates a new EmployeeHandler func NewEmployeeHandler() *EmployeeHandler { + // return &%!s(MISSING)Handler{} return &EmployeeHandler{} } + // GetEmployee godoc // @Summary Get employee // @Description Returns a list of employees // @Tags employee // @Accept json // @Produce json -// @Success 200 {object} employee.EmployeeGetResponse "Employee GET response" +// @Success 200 {object} models.EmployeeGetResponse "Employee GET response" // @Router /api/v1/employees [get] func (h *EmployeeHandler) GetEmployee(c *gin.Context) { - response := employee.EmployeeGetResponse{ - Message: "List of Employee", + response := models.EmployeeGetResponse{ + Message: "List of employees", Data: []string{"Employee 1", "Employee 2"}, } c.JSON(http.StatusOK, response) } -// GetemployeeByID godoc +// GetEmployeeByID godoc // @Summary Get employee by ID // @Description Returns a single employee by ID -// @Tags Employee +// @Tags employee // @Accept json // @Produce json -// @Param id path string true "employee ID" -// @Success 200 {object} Employee.EmployeeGetByIDResponse "employee GET by ID response" -// @Failure 404 {object} Employee.ErrorResponse "Employee not found" -// @Router /api/v1/employee/{id} [get] -func (h *EmployeeHandler) GetemployeeByID(c *gin.Context) { +// @Param id path string true "Employee ID" +// @Success 200 {object} models.EmployeeGetByIDResponse "Employee GET by ID response" +// @Failure 404 {object} models.ErrorResponse "employee not found" +// @Router /api/v1/Employee/{id} [get] +func (h *EmployeeHandler) GetEmployeeByID(c *gin.Context) { id := c.Param("id") - response := Employee.%!s(MISSING)GetByIDResponse{ + response := models.EmployeeGetByIDResponse{ ID: id, - Message: "%!s(MISSING) details", + Message: "employee details", } c.JSON(http.StatusOK, response) -} +}%!(EXTRA string=Employee) + // CreateEmployee godoc // @Summary Create employee // @Description Creates a new employee // @Tags employee // @Accept json // @Produce json -// @Param request body employee.EmployeeCreateRequest true "Employee creation request" -// @Success 201 {object} employee.EmployeeCreateResponse "Employee created successfully" -// @Failure 400 {object} employee.ErrorResponse "Bad request" -// @Router /api/v1/Employee [post] -func (h *EmployeeHandler) Createemployee(c *gin.Context) { - var req Employee.EmployeeCreateRequest +// @Param request body models.EmployeeCreateRequest true "Employee creation request" +// @Success 201 {object} models.EmployeeCreateResponse "Employee created successfully" +// @Failure 400 {object} models.ErrorResponse "Bad request" +// @Router /api/v1/employees [post] +func (h *EmployeeHandler) CreateEmployee(c *gin.Context) { + var req models.EmployeeCreateRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } - response := %!s(MISSING).%!s(MISSING)CreateResponse{ + response := models.EmployeeCreateResponse{ ID: uuid.NewString(), - Message: "%!s(MISSING) created successfully", + Message: "Employee created successfully", Data: req, } c.JSON(http.StatusCreated, response) } + // UpdateEmployee godoc // @Summary Update employee // @Description Updates an existing employee @@ -81,26 +84,27 @@ func (h *EmployeeHandler) Createemployee(c *gin.Context) { // @Accept json // @Produce json // @Param id path string true "Employee ID" -// @Param request body employee.EmployeeUpdateRequest true "Employee update request" -// @Success 200 {object} Employee.employeeUpdateResponse "Employee updated successfully" -// @Failure 400 {object} employee.ErrorResponse "Bad request" -// @Failure 404 {object} Employee.ErrorResponse "employee not found" +// @Param request body models.employeeUpdateRequest true "Employee update request" +// @Success 200 {object} models.EmployeeUpdateResponse "Employee updated successfully" +// @Failure 400 {object} models.ErrorResponse "Bad request" +// @Failure 404 {object} models.ErrorResponse "employee not found" // @Router /api/v1/Employee/{id} [put] func (h *EmployeeHandler) UpdateEmployee(c *gin.Context) { id := c.Param("id") - var req Employee.%!s(MISSING)UpdateRequest + var req models.employeeUpdateRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } - response := %!s(MISSING).%!s(MISSING)UpdateResponse{ + response := models.EmployeeUpdateResponse{ ID: id, - Message: "%!s(MISSING) updated successfully", + Message: "Employee updated successfully", Data: req, } c.JSON(http.StatusOK, response) -} +}%!(EXTRA string=Employee, string=Employee) + // DeleteEmployee godoc // @Summary Delete employee // @Description Deletes a employee by ID @@ -108,14 +112,14 @@ func (h *EmployeeHandler) UpdateEmployee(c *gin.Context) { // @Accept json // @Produce json // @Param id path string true "Employee ID" -// @Success 200 {object} employee.EmployeeDeleteResponse "Employee deleted successfully" -// @Failure 404 {object} employee.ErrorResponse "Employee not found" -// @Router /api/v1/Employee/{id} [delete] -func (h *employeeHandler) DeleteEmployee(c *gin.Context) { +// @Success 200 {object} models.employeeDeleteResponse "Employee deleted successfully" +// @Failure 404 {object} models.ErrorResponse "Employee not found" +// @Router /api/v1/employee/{id} [delete] +func (h *EmployeeHandler) DeleteEmployee(c *gin.Context) { id := c.Param("id") - response := Employee.%!s(MISSING)DeleteResponse{ + response := models.EmployeeDeleteResponse{ ID: id, - Message: "%!s(MISSING) deleted successfully", + Message: "Employee deleted successfully", } c.JSON(http.StatusOK, response) } \ No newline at end of file diff --git a/internal/models/employee/employee.go b/internal/models/employee/employee.go index 0d4694dd..a58c830d 100644 --- a/internal/models/employee/employee.go +++ b/internal/models/employee/employee.go @@ -11,36 +11,36 @@ type EmployeeGetByIDResponse struct { ID string `json:"id"` Message string `json:"message"` } -%!(EXTRA string=employee, string=Employee)// EmployeeCreateRequest represents the request for creating employee +// EmployeeCreateRequest represents the request for creating employee type EmployeeCreateRequest struct { Name string `json:"name" binding:"required"` // Add more fields as needed } -// employeeCreateResponse represents the response for creating Employee -type employeeCreateResponse struct { +// EmployeeCreateResponse represents the response for creating employee +type EmployeeCreateResponse struct { ID string `json:"id"` Message string `json:"message"` Data interface{} `json:"data"` } -%!(EXTRA string=Employee)// EmployeeUpdateRequest represents the request for updating employee +// EmployeeUpdateRequest represents the request for updating employee type EmployeeUpdateRequest struct { Name string `json:"name" binding:"required"` // Add more fields as needed } -// employeeUpdateResponse represents the response for updating Employee -type employeeUpdateResponse struct { +// EmployeeUpdateResponse represents the response for updating employee +type EmployeeUpdateResponse struct { ID string `json:"id"` Message string `json:"message"` Data interface{} `json:"data"` } -%!(EXTRA string=Employee)// EmployeeDeleteResponse represents the response for deleting employee +// EmployeeDeleteResponse represents the response for deleting employee type EmployeeDeleteResponse struct { ID string `json:"id"` Message string `json:"message"` } -%!(EXTRA string=employee)// ErrorResponse represents an error response +// ErrorResponse represents an error response type ErrorResponse struct { Error string `json:"error"` } diff --git a/internal/routes/v1/routes.go b/internal/routes/v1/routes.go index 2cb22028..d11d0bee 100644 --- a/internal/routes/v1/routes.go +++ b/internal/routes/v1/routes.go @@ -56,6 +56,8 @@ func RegisterRoutes(cfg *config.Config) *gin.Engine { // Protected routes (require authentication) + + // Employee endpoints employeeHandler := employeeHandlers.NewEmployeeHandler() v1.GET("/employees", employeeHandler.GetEmployee) diff --git a/tools/generate-handler.go b/tools/generate-handler.go index b71decb0..f85e3599 100644 --- a/tools/generate-handler.go +++ b/tools/generate-handler.go @@ -107,8 +107,7 @@ func generateHandlerFile(data HandlerData, handlerDir string) { import ( "net/http" - "api-service/internal/models/%s" - + "api-service/internal/models" "github.com/gin-gonic/gin" "github.com/google/uuid" ) @@ -119,23 +118,24 @@ type %sHandler struct{} // New%sHandler creates a new %sHandler func New%sHandler() *%sHandler { return &%sHandler{} -}`, data.NameLower, data.Name, data.NameLower, data.Name, data.Name, data.Name, data.Name, data.Name) +}`, data.Name, data.NameLower, data.Name, data.Name, data.Name, data.Name, data.Name) // Add methods based on requested operations var methodsContent string if data.HasGet { methodsContent += fmt.Sprintf(` + // Get%s godoc // @Summary Get %s // @Description Returns a list of %s // @Tags %s // @Accept json // @Produce json -// @Success 200 {object} %s.%sGetResponse "%s GET response" +// @Success 200 {object} models.%sGetResponse "%s GET response" // @Router /api/v1/%s [get] func (h *%sHandler) Get%s(c *gin.Context) { - response := %s.%sGetResponse{ + response := models.%sGetResponse{ Message: "List of %s", Data: []string{"%s 1", "%s 2"}, } @@ -149,45 +149,46 @@ func (h *%sHandler) Get%s(c *gin.Context) { // @Accept json // @Produce json // @Param id path string true "%s ID" -// @Success 200 {object} %s.%sGetByIDResponse "%s GET by ID response" -// @Failure 404 {object} %s.ErrorResponse "%s not found" +// @Success 200 {object} models.%sGetByIDResponse "%s GET by ID response" +// @Failure 404 {object} models.ErrorResponse "%s not found" // @Router /api/v1/%s/{id} [get] func (h *%sHandler) Get%sByID(c *gin.Context) { id := c.Param("id") - response := %s.%sGetByIDResponse{ + response := models.%sGetByIDResponse{ ID: id, Message: "%s details", } c.JSON(http.StatusOK, response) }`, data.Name, data.NameLower, data.NamePlural, data.NameLower, - data.NameLower, data.Name, data.Name, data.NamePlural, - data.Name, data.Name, data.NameLower, data.Name, data.Name, data.Name, + data.Name, data.Name, data.NamePlural, + data.Name, data.Name, data.Name, data.NamePlural, data.Name, data.Name, data.Name, data.NameLower, data.NameLower, data.NameLower, - data.Name, data.NameLower, data.Name, data.Name, data.NameLower, - data.Name, data.Name, data.NameLower, data.Name, data.NameLower, data.Name) + data.Name, data.Name, data.Name, data.NameLower, data.Name, + data.Name, data.Name, data.Name, data.NameLower, data.Name) } if data.HasPost { methodsContent += fmt.Sprintf(` + // Create%s godoc // @Summary Create %s // @Description Creates a new %s // @Tags %s // @Accept json // @Produce json -// @Param request body %s.%sCreateRequest true "%s creation request" -// @Success 201 {object} %s.%sCreateResponse "%s created successfully" -// @Failure 400 {object} %s.ErrorResponse "Bad request" +// @Param request body models.%sCreateRequest true "%s creation request" +// @Success 201 {object} models.%sCreateResponse "%s created successfully" +// @Failure 400 {object} models.ErrorResponse "Bad request" // @Router /api/v1/%s [post] func (h *%sHandler) Create%s(c *gin.Context) { - var req %s.%sCreateRequest + var req models.%sCreateRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } - response := %s.%sCreateResponse{ + response := models.%sCreateResponse{ ID: uuid.NewString(), Message: "%s created successfully", Data: req, @@ -195,13 +196,13 @@ func (h *%sHandler) Create%s(c *gin.Context) { c.JSON(http.StatusCreated, response) }`, data.Name, data.NameLower, data.NameLower, data.NameLower, - data.NameLower, data.Name, data.Name, data.NameLower, data.Name, - data.Name, data.NameLower, data.Name, data.Name, data.NameLower, - data.Name, data.Name) + data.Name, data.Name, data.Name, data.Name, data.NamePlural, + data.Name, data.Name, data.Name, data.Name, data.Name) } if data.HasPut { methodsContent += fmt.Sprintf(` + // Update%s godoc // @Summary Update %s // @Description Updates an existing %s @@ -209,20 +210,20 @@ func (h *%sHandler) Create%s(c *gin.Context) { // @Accept json // @Produce json // @Param id path string true "%s ID" -// @Param request body %s.%sUpdateRequest true "%s update request" -// @Success 200 {object} %s.%sUpdateResponse "%s updated successfully" -// @Failure 400 {object} %s.ErrorResponse "Bad request" -// @Failure 404 {object} %s.ErrorResponse "%s not found" +// @Param request body models.%sUpdateRequest true "%s update request" +// @Success 200 {object} models.%sUpdateResponse "%s updated successfully" +// @Failure 400 {object} models.ErrorResponse "Bad request" +// @Failure 404 {object} models.ErrorResponse "%s not found" // @Router /api/v1/%s/{id} [put] func (h *%sHandler) Update%s(c *gin.Context) { id := c.Param("id") - var req %s.%sUpdateRequest + var req models.%sUpdateRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } - response := %s.%sUpdateResponse{ + response := models.%sUpdateResponse{ ID: id, Message: "%s updated successfully", Data: req, @@ -231,12 +232,13 @@ func (h *%sHandler) Update%s(c *gin.Context) { }`, data.Name, data.NameLower, data.NameLower, data.NameLower, data.Name, data.NameLower, data.Name, data.Name, data.Name, - data.NameLower, data.Name, data.NameLower, data.Name, data.NameLower, + data.NameLower, data.Name, data.Name, data.Name, data.NameLower, data.Name, data.Name, data.Name, data.Name) } if data.HasDelete { methodsContent += fmt.Sprintf(` + // Delete%s godoc // @Summary Delete %s // @Description Deletes a %s by ID @@ -244,12 +246,12 @@ func (h *%sHandler) Update%s(c *gin.Context) { // @Accept json // @Produce json // @Param id path string true "%s ID" -// @Success 200 {object} %s.%sDeleteResponse "%s deleted successfully" -// @Failure 404 {object} %s.ErrorResponse "%s not found" +// @Success 200 {object} models.%sDeleteResponse "%s deleted successfully" +// @Failure 404 {object} models.ErrorResponse "%s not found" // @Router /api/v1/%s/{id} [delete] func (h *%sHandler) Delete%s(c *gin.Context) { id := c.Param("id") - response := %s.%sDeleteResponse{ + response := models.%sDeleteResponse{ ID: id, Message: "%s deleted successfully", } @@ -257,7 +259,7 @@ func (h *%sHandler) Delete%s(c *gin.Context) { }`, data.Name, data.NameLower, data.NameLower, data.NameLower, data.Name, data.NameLower, data.Name, data.Name, data.NameLower, - data.Name, data.Name, data.NameLower, data.Name, data.Name) + data.Name, data.Name, data.Name, data.Name) } fullContent := handlerContent + methodsContent @@ -280,10 +282,11 @@ type %sGetByIDResponse struct { ID string `+"`json:\"id\"`"+` Message string `+"`json:\"message\"`"+` } -`, data.Name, data.NamePlural, data.Name, data.Name, data.NameLower, data.Name, data.NameLower, data.Name) +`, data.Name, data.NamePlural, data.Name, data.Name, data.NameLower, data.Name) } if data.HasPost { + modelContent += fmt.Sprintf(`// %sCreateRequest represents the request for creating %s type %sCreateRequest struct { Name string `+"`json:\"name\" binding:\"required\"`"+` // Add more fields as needed @@ -295,7 +298,7 @@ type %sCreateResponse struct { Message string `+"`json:\"message\"`"+` Data interface{} `+"`json:\"data\"`"+` } -`, data.Name, data.NameLower, data.Name, data.NameLower, data.Name, data.NameLower, data.Name) +`, data.Name, data.NameLower, data.Name, data.Name, data.NameLower, data.Name) } if data.HasPut { @@ -311,7 +314,7 @@ type %sUpdateResponse struct { Message string `+"`json:\"message\"`"+` Data interface{} `+"`json:\"data\"`"+` } -`, data.Name, data.NameLower, data.Name, data.NameLower, data.Name, data.NameLower, data.Name) +`, data.Name, data.NameLower, data.Name, data.Name, data.NameLower, data.Name) } if data.HasDelete { @@ -320,7 +323,7 @@ type %sDeleteResponse struct { ID string `+"`json:\"id\"`"+` Message string `+"`json:\"message\"`"+` } -`, data.Name, data.NameLower, data.Name, data.NameLower) +`, data.Name, data.NameLower, data.Name) } modelContent += `// ErrorResponse represents an error response