new endpoints
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"Engine/internal/database"
|
||||
"Engine/internal/model"
|
||||
)
|
||||
|
||||
type ReferenceHandler struct {
|
||||
@@ -23,7 +24,7 @@ func NewReferenceHandler(repo *database.ReferenceRepo) *ReferenceHandler {
|
||||
// POST /api/v1/department/create
|
||||
// PUT /api/v1/departments/{id} (same body, id from path)
|
||||
func (h *ReferenceHandler) CreateDepartment(w http.ResponseWriter, r *http.Request) {
|
||||
var req database.Department
|
||||
var req model.CreateDepartmentRequest
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid body: %v", err))
|
||||
return
|
||||
@@ -55,11 +56,106 @@ func (h *ReferenceHandler) ListDepartments(w http.ResponseWriter, r *http.Reques
|
||||
return
|
||||
}
|
||||
if depts == nil {
|
||||
depts = []database.Department{}
|
||||
depts = []model.Department{}
|
||||
}
|
||||
writeJSON(w, http.StatusOK, depts)
|
||||
}
|
||||
|
||||
// GET /api/v1/department/
|
||||
func (h *ReferenceHandler) GetDepartment(w http.ResponseWriter, r *http.Request) {
|
||||
var req model.GetDepartmentRequest
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid body: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
// exactly one field must be set
|
||||
set := 0
|
||||
if req.Code != nil {
|
||||
set++
|
||||
}
|
||||
if req.Name != nil {
|
||||
set++
|
||||
}
|
||||
if req.CostCenter != nil {
|
||||
set++
|
||||
}
|
||||
if set == 0 {
|
||||
writeError(w, http.StatusBadRequest, "one of code, name, cost_center is required")
|
||||
return
|
||||
}
|
||||
if set > 1 {
|
||||
writeError(w, http.StatusBadRequest, "only one of code, name, cost_center may be set")
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
dept *model.Department
|
||||
err error
|
||||
)
|
||||
switch {
|
||||
case req.Code != nil:
|
||||
dept, err = h.repo.GetDepartmentByCode(r.Context(), *req.Code)
|
||||
case req.Name != nil:
|
||||
dept, err = h.repo.GetDepartmentByName(r.Context(), *req.Name)
|
||||
case req.CostCenter != nil:
|
||||
dept, err = h.repo.GetDepartmentByCostCenter(r.Context(), *req.CostCenter)
|
||||
}
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
if dept == nil {
|
||||
writeError(w, http.StatusNotFound, "department not found")
|
||||
return
|
||||
}
|
||||
|
||||
writeJSON(w, http.StatusOK, dept)
|
||||
}
|
||||
|
||||
func (h *ReferenceHandler) SetActivityDepartment(w http.ResponseWriter, r *http.Request) {
|
||||
var req model.SetDepartmentActivity
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid body: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
set := 0
|
||||
if req.Code != nil {
|
||||
set++
|
||||
}
|
||||
if req.Name != nil {
|
||||
set++
|
||||
}
|
||||
if req.CostCenter != nil {
|
||||
set++
|
||||
}
|
||||
if set == 0 {
|
||||
writeError(w, http.StatusBadRequest, "one of code, name, cost_center is required")
|
||||
return
|
||||
}
|
||||
if set > 1 {
|
||||
writeError(w, http.StatusBadRequest, "only one of code, name, cost_center may be set")
|
||||
return
|
||||
}
|
||||
|
||||
var err error
|
||||
switch {
|
||||
case req.Code != nil:
|
||||
err = h.repo.SetDepartmentActivityByCode(r.Context(), *req.Code, req.Active)
|
||||
case req.Name != nil:
|
||||
err = h.repo.SetDepartmentActivityByName(r.Context(), *req.Name, req.Active)
|
||||
case req.CostCenter != nil:
|
||||
err = h.repo.SetDepartmentActivityByCostCenter(r.Context(), *req.CostCenter, req.Active)
|
||||
}
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}
|
||||
|
||||
// DELETE /api/v1/department/delete
|
||||
func (h *ReferenceHandler) DeleteDepartment(w http.ResponseWriter, r *http.Request) {
|
||||
var req struct {
|
||||
@@ -90,7 +186,7 @@ var validGLTypes = map[string]bool{
|
||||
|
||||
// POST /api/v1/gl-accounts
|
||||
func (h *ReferenceHandler) CreateGLAccount(w http.ResponseWriter, r *http.Request) {
|
||||
var req database.GLAccount
|
||||
var req model.GLAccount
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid body: %v", err))
|
||||
return
|
||||
@@ -126,7 +222,7 @@ func (h *ReferenceHandler) ListGLAccounts(w http.ResponseWriter, r *http.Request
|
||||
return
|
||||
}
|
||||
if accts == nil {
|
||||
accts = []database.GLAccount{}
|
||||
accts = []model.GLAccount{}
|
||||
}
|
||||
writeJSON(w, http.StatusOK, accts)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user