init
This commit is contained in:
147
internal/server/project.go
Normal file
147
internal/server/project.go
Normal file
@@ -0,0 +1,147 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/goccy/go-json"
|
||||
"madsky.ru/go-tracker/internal/model/project"
|
||||
"madsky.ru/go-tracker/internal/model/user"
|
||||
"madsky.ru/go-tracker/internal/server/request"
|
||||
"madsky.ru/go-tracker/internal/server/response"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (app *Application) findProjects(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
u := ctx.Value(UserContext{}).(*user.User)
|
||||
|
||||
var filter project.FilterDTO
|
||||
|
||||
if u.Role != "admin" {
|
||||
filter.UserID = &u.ID
|
||||
}
|
||||
|
||||
isAdmin := u.Role == "admin"
|
||||
|
||||
p, err := app.Storage.Projects.Find(app.Ctx, u.ID, isAdmin, &filter)
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
response.WriteJSON(w, nil, http.StatusOK, &p)
|
||||
}
|
||||
|
||||
func (app *Application) findProjectByID(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
u := ctx.Value(UserContext{}).(*user.User)
|
||||
|
||||
projectId, err := request.Param(r, "id")
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
var filter project.FilterDTO
|
||||
|
||||
if u.Role != "admin" {
|
||||
filter.UserID = &u.ID
|
||||
}
|
||||
|
||||
isAdmin := u.Role == "admin"
|
||||
|
||||
p, err := app.Storage.Projects.FindOne(app.Ctx, projectId, u.ID, isAdmin)
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
response.WriteJSON(w, nil, http.StatusOK, &p)
|
||||
}
|
||||
|
||||
func (app *Application) createProject(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
u := ctx.Value(UserContext{}).(*user.User)
|
||||
|
||||
dec := json.NewDecoder(r.Body)
|
||||
dec.DisallowUnknownFields()
|
||||
|
||||
var projectDto project.CreateProjectDTO
|
||||
|
||||
if err := dec.Decode(&projectDto); err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
validate = validator.New(validator.WithRequiredStructEnabled())
|
||||
err := validate.Struct(projectDto)
|
||||
if err != nil {
|
||||
var validateErrs validator.ValidationErrors
|
||||
|
||||
errorsMessages := make([]string, 0)
|
||||
if errors.As(err, &validateErrs) {
|
||||
for _, e := range validateErrs {
|
||||
errorsMessages = append(errorsMessages, fmt.Sprintf("%s is %s", e.Field(), e.Tag()))
|
||||
}
|
||||
}
|
||||
|
||||
response.Error(w, errors.New(strings.Join(errorsMessages, ",")), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
p, err := app.Storage.Projects.Create(app.Ctx, &projectDto)
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
err = app.Storage.UserToProject.Create(app.Ctx, u.ID, p.ID)
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
response.WriteJSON(w, nil, http.StatusCreated, &p)
|
||||
}
|
||||
|
||||
func (app *Application) updateProject(w http.ResponseWriter, r *http.Request) {
|
||||
id, err := request.Param(r, "id")
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
dec := json.NewDecoder(r.Body)
|
||||
dec.DisallowUnknownFields()
|
||||
|
||||
var projectDto project.UpdateProjectDTO
|
||||
|
||||
if err = dec.Decode(&projectDto); err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
p, err := app.Storage.Projects.Update(app.Ctx, id, &projectDto)
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
response.WriteJSON(w, nil, http.StatusOK, &p)
|
||||
}
|
||||
|
||||
func (app *Application) deleteProject(w http.ResponseWriter, r *http.Request) {
|
||||
id, err := request.Param(r, "id")
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
count, err := app.Storage.Projects.Remove(app.Ctx, id)
|
||||
if err != nil {
|
||||
response.Error(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
response.WriteJSON(w, nil, http.StatusOK, count)
|
||||
}
|
||||
Reference in New Issue
Block a user