Files
go-tracker/internal/server/response/response.go
2025-11-12 09:41:52 +03:00

61 lines
1.2 KiB
Go

package response
import (
"fmt"
"github.com/goccy/go-json"
"madsky.ru/go-tracker/internal/model/user"
"net/http"
)
type Response struct {
Status string `json:"status"`
Message *string `json:"message"`
Data interface{} `json:"data"`
}
const (
StatusOK = "Success"
StatusError = "Error"
)
func WriteJSON(w http.ResponseWriter, message *string, code int, data interface{}) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(code)
statusText := StatusOK
if code >= 400 {
statusText = StatusError
}
if err := json.NewEncoder(w).Encode(&Response{
Status: statusText,
Message: message,
Data: data,
}); err != nil {
http.Error(w, "unknown error", http.StatusInternalServerError)
}
}
type CustomError struct {
Message string
}
func (e *CustomError) Error() string {
return fmt.Sprintf("custom error: %s", e.Message)
}
func Error(w http.ResponseWriter, err error, code int) {
errorMessage := err.Error()
WriteJSON(w, &errorMessage, code, nil)
}
func ToUserResponseDto(u *user.User) *user.ResponseDTO {
var ur user.ResponseDTO
ur.ID = u.ID
ur.Email = u.Email
ur.Role = u.Role
ur.Name = u.Name
return &ur
}