Skip to content

Commit

Permalink
refactor: rename, repackage, and refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
litsynp committed Feb 3, 2024
1 parent ea74e9e commit b83b2c8
Show file tree
Hide file tree
Showing 14 changed files with 100 additions and 123 deletions.
29 changes: 14 additions & 15 deletions internal/common/web.go → api/web.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package utils
package pnd

import (
"encoding/json"
Expand All @@ -8,50 +8,49 @@ import (

"github.com/go-chi/chi/v5"
"github.com/go-playground/validator"
pnd "github.com/pet-sitter/pets-next-door-api/api"
)

func ParseBody(r *http.Request, payload interface{}) *pnd.AppError {
func ParseBody(r *http.Request, payload interface{}) *AppError {
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
return pnd.ErrInvalidBody(err)
return ErrInvalidBody(err)
}
if err := validator.New().Struct(payload); err != nil {
return pnd.ErrInvalidBody(err)
return ErrInvalidBody(err)
}

return nil
}

func ParseIdFromPath(r *http.Request, path string) (*int, *pnd.AppError) {
func ParseIdFromPath(r *http.Request, path string) (*int, *AppError) {
id, err := strconv.Atoi(chi.URLParam(r, path))
if err != nil {
return nil, pnd.ErrInvalidParam(err)
return nil, ErrInvalidParam(err)
}
if id <= 0 {
return nil, pnd.ErrInvalidParam(fmt.Errorf("expected integer value bigger than 0 for path: %s", path))
return nil, ErrInvalidParam(fmt.Errorf("expected integer value bigger than 0 for path: %s", path))
}

return &id, nil
}

func ParseOptionalIntQuery(r *http.Request, query string) (*int, *pnd.AppError) {
func ParseOptionalIntQuery(r *http.Request, query string) (*int, *AppError) {
queryStr := r.URL.Query().Get(query)
if queryStr == "" {
return nil, nil
}

value, err := strconv.Atoi(queryStr)
if err != nil {
return nil, pnd.ErrInvalidQuery(fmt.Errorf("expected integer value for query: %s", query))
return nil, ErrInvalidQuery(fmt.Errorf("expected integer value for query: %s", query))
}

return &value, nil
}

func ParseRequiredStringQuery(r *http.Request, query string) (*string, *pnd.AppError) {
func ParseRequiredStringQuery(r *http.Request, query string) (*string, *AppError) {
queryStr := r.URL.Query().Get(query)
if queryStr == "" {
return nil, pnd.ErrInvalidQuery(fmt.Errorf("expected non-empty string for query: %s", query))
return nil, ErrInvalidQuery(fmt.Errorf("expected non-empty string for query: %s", query))
}

return &queryStr, nil
Expand All @@ -67,7 +66,7 @@ func ParseOptionalStringQuery(r *http.Request, query string) *string {
}

// ParsePaginationQueries parses pagination parameters from query string: page, size.
func ParsePaginationQueries(r *http.Request, defaultPage int, defaultLimit int) (page int, size int, err *pnd.AppError) {
func ParsePaginationQueries(r *http.Request, defaultPage int, defaultLimit int) (page int, size int, err *AppError) {
pageQuery := r.URL.Query().Get("page")
sizeQuery := r.URL.Query().Get("size")

Expand All @@ -78,15 +77,15 @@ func ParsePaginationQueries(r *http.Request, defaultPage int, defaultLimit int)
var atoiError error
page, atoiError = strconv.Atoi(pageQuery)
if atoiError != nil {
return 0, 0, pnd.ErrInvalidPagination(fmt.Errorf("expected integer value bigger than 0 for query: page"))
return 0, 0, ErrInvalidPagination(fmt.Errorf("expected integer value bigger than 0 for query: page"))
}
}

if sizeQuery != "" {
var atoiError error
size, atoiError = strconv.Atoi(sizeQuery)
if atoiError != nil {
return 0, 0, pnd.ErrInvalidPagination(fmt.Errorf("expected integer value bigger than 0 for query: size"))
return 0, 0, ErrInvalidPagination(fmt.Errorf("expected integer value bigger than 0 for query: size"))
}
}

Expand Down
8 changes: 4 additions & 4 deletions cmd/server/handler/auth_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

"github.com/go-chi/render"
app "github.com/pet-sitter/pets-next-door-api/api"
utils "github.com/pet-sitter/pets-next-door-api/internal/common"
pnd "github.com/pet-sitter/pets-next-door-api/api"
"github.com/pet-sitter/pets-next-door-api/internal/configs"
"github.com/pet-sitter/pets-next-door-api/internal/domain/auth"
"github.com/pet-sitter/pets-next-door-api/internal/domain/user"
Expand All @@ -15,10 +15,10 @@ import (

type authHandler struct {
authService auth.AuthService
kakaoClient kakaoinfra.IKakaoClient
kakaoClient kakaoinfra.KakaoClient
}

func NewAuthHandler(authService auth.AuthService, kakaoClient kakaoinfra.IKakaoClient) *authHandler {
func NewAuthHandler(authService auth.AuthService, kakaoClient kakaoinfra.KakaoClient) *authHandler {
return &authHandler{
authService: authService,
kakaoClient: kakaoClient,
Expand Down Expand Up @@ -48,7 +48,7 @@ func (h *authHandler) KakaoLogin(w http.ResponseWriter, r *http.Request) {
// @Success 200 {object} auth.KakaoCallbackView
// @Router /auth/callback/kakao [get]
func (h *authHandler) KakaoCallback(w http.ResponseWriter, r *http.Request) {
code := utils.ParseOptionalStringQuery(r, "code")
code := pnd.ParseOptionalStringQuery(r, "code")
tokenView, err := h.kakaoClient.FetchAccessToken(*code)
if err != nil {
render.Render(w, r, app.ErrUnknown(err))
Expand Down
9 changes: 4 additions & 5 deletions cmd/server/handler/breed_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ import (

"github.com/go-chi/render"
pnd "github.com/pet-sitter/pets-next-door-api/api"
utils "github.com/pet-sitter/pets-next-door-api/internal/common"
"github.com/pet-sitter/pets-next-door-api/internal/domain/pet"
)

type BreedHandler struct {
breedService *pet.BreedService
breedService pet.BreedService
}

func NewBreedHandler(breedService *pet.BreedService) *BreedHandler {
func NewBreedHandler(breedService pet.BreedService) *BreedHandler {
return &BreedHandler{breedService: breedService}
}

Expand All @@ -29,8 +28,8 @@ func NewBreedHandler(breedService *pet.BreedService) *BreedHandler {
// @Success 200 {object} pnd.PaginatedView[pet.BreedView]
// @Router /breeds [get]
func (h *BreedHandler) FindBreeds(w http.ResponseWriter, r *http.Request) {
petType := utils.ParseOptionalStringQuery(r, "pet_type")
page, size, err := utils.ParsePaginationQueries(r, 1, 20)
petType := pnd.ParseOptionalStringQuery(r, "pet_type")
page, size, err := pnd.ParsePaginationQueries(r, 1, 20)
if err != nil {
render.Render(w, r, err)
return
Expand Down
4 changes: 2 additions & 2 deletions cmd/server/handler/condition_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import (
)

type ConditionHandler struct {
conditionService *sos_post.ConditionService
conditionService sos_post.ConditionService
}

func NewConditionHandler(conditionService *sos_post.ConditionService) *ConditionHandler {
func NewConditionHandler(conditionService sos_post.ConditionService) *ConditionHandler {
return &ConditionHandler{conditionService: conditionService}
}

Expand Down
7 changes: 3 additions & 4 deletions cmd/server/handler/media_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@ import (

"github.com/go-chi/render"
pnd "github.com/pet-sitter/pets-next-door-api/api"
utils "github.com/pet-sitter/pets-next-door-api/internal/common"
"github.com/pet-sitter/pets-next-door-api/internal/domain/media"
)

type mediaHandler struct {
mediaService media.MediaServicer
mediaService media.MediaService
}

func NewMediaHandler(mediaService media.MediaServicer) *mediaHandler {
func NewMediaHandler(mediaService media.MediaService) *mediaHandler {
return &mediaHandler{
mediaService: mediaService,
}
Expand All @@ -30,7 +29,7 @@ func NewMediaHandler(mediaService media.MediaServicer) *mediaHandler {
// @Success 200 {object} media.MediaView
// @Router /media/{id} [get]
func (h *mediaHandler) FindMediaByID(w http.ResponseWriter, r *http.Request) {
id, err := utils.ParseIdFromPath(r, "id")
id, err := pnd.ParseIdFromPath(r, "id")
if err != nil {
render.Render(w, r, err)
return
Expand Down
13 changes: 6 additions & 7 deletions cmd/server/handler/sos_post_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (

"github.com/go-chi/render"
pnd "github.com/pet-sitter/pets-next-door-api/api"
utils "github.com/pet-sitter/pets-next-door-api/internal/common"
"github.com/pet-sitter/pets-next-door-api/internal/domain/auth"
"github.com/pet-sitter/pets-next-door-api/internal/domain/sos_post"
)
Expand Down Expand Up @@ -41,7 +40,7 @@ func (h *SosPostHandler) WriteSosPost(w http.ResponseWriter, r *http.Request) {
}

var writeSosPostRequest sos_post.WriteSosPostRequest
if err := utils.ParseBody(r, &writeSosPostRequest); err != nil {
if err := pnd.ParseBody(r, &writeSosPostRequest); err != nil {
render.Render(w, r, err)
return
}
Expand All @@ -68,18 +67,18 @@ func (h *SosPostHandler) WriteSosPost(w http.ResponseWriter, r *http.Request) {
// @Success 200 {object} pnd.PaginatedView[sos_post.FindSosPostView]
// @Router /posts/sos [get]
func (h *SosPostHandler) FindSosPosts(w http.ResponseWriter, r *http.Request) {
authorID, err := utils.ParseOptionalIntQuery(r, "author_id")
authorID, err := pnd.ParseOptionalIntQuery(r, "author_id")
if err != nil {
render.Render(w, r, err)
return
}

sortBy := "newest"
if sortByQuery := utils.ParseOptionalStringQuery(r, "sort_by"); sortByQuery != nil {
if sortByQuery := pnd.ParseOptionalStringQuery(r, "sort_by"); sortByQuery != nil {
sortBy = *sortByQuery
}

page, size, err := utils.ParsePaginationQueries(r, 1, 20)
page, size, err := pnd.ParsePaginationQueries(r, 1, 20)
if err != nil {
render.Render(w, r, err)
return
Expand Down Expand Up @@ -114,7 +113,7 @@ func (h *SosPostHandler) FindSosPosts(w http.ResponseWriter, r *http.Request) {
// @Success 200 {object} sos_post.FindSosPostView
// @Router /posts/sos/{id} [get]
func (h *SosPostHandler) FindSosPostByID(w http.ResponseWriter, r *http.Request) {
SosPostID, err := utils.ParseIdFromPath(r, "id")
SosPostID, err := pnd.ParseIdFromPath(r, "id")
if err != nil {
render.Render(w, r, err)
return
Expand Down Expand Up @@ -146,7 +145,7 @@ func (h *SosPostHandler) UpdateSosPost(w http.ResponseWriter, r *http.Request) {
}

var updateSosPostRequest sos_post.UpdateSosPostRequest
if err := utils.ParseBody(r, &updateSosPostRequest); err != nil {
if err := pnd.ParseBody(r, &updateSosPostRequest); err != nil {
render.Render(w, r, err)
return
}
Expand Down
19 changes: 9 additions & 10 deletions cmd/server/handler/user_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,17 @@ import (

"github.com/go-chi/render"
pnd "github.com/pet-sitter/pets-next-door-api/api"
utils "github.com/pet-sitter/pets-next-door-api/internal/common"
"github.com/pet-sitter/pets-next-door-api/internal/domain/auth"
"github.com/pet-sitter/pets-next-door-api/internal/domain/pet"
"github.com/pet-sitter/pets-next-door-api/internal/domain/user"
)

type UserHandler struct {
userService user.UserServicer
userService user.UserService
authService auth.AuthService
}

func NewUserHandler(userService user.UserServicer, authService auth.AuthService) *UserHandler {
func NewUserHandler(userService user.UserService, authService auth.AuthService) *UserHandler {
return &UserHandler{
userService: userService,
authService: authService,
Expand All @@ -34,7 +33,7 @@ func NewUserHandler(userService user.UserServicer, authService auth.AuthService)
// @Router /users [post]
func (h *UserHandler) RegisterUser(w http.ResponseWriter, r *http.Request) {
var registerUserRequest user.RegisterUserRequest
if err := utils.ParseBody(r, &registerUserRequest); err != nil {
if err := pnd.ParseBody(r, &registerUserRequest); err != nil {
render.Render(w, r, err)
return
}
Expand All @@ -59,7 +58,7 @@ func (h *UserHandler) RegisterUser(w http.ResponseWriter, r *http.Request) {
// @Router /users/check/nickname [post]
func (h *UserHandler) CheckUserNickname(w http.ResponseWriter, r *http.Request) {
var checkUserNicknameRequest user.CheckNicknameRequest
if err := utils.ParseBody(r, &checkUserNicknameRequest); err != nil {
if err := pnd.ParseBody(r, &checkUserNicknameRequest); err != nil {
render.Render(w, r, err)
return
}
Expand All @@ -84,7 +83,7 @@ func (h *UserHandler) CheckUserNickname(w http.ResponseWriter, r *http.Request)
// @Router /users/status [post]
func (h *UserHandler) FindUserStatusByEmail(w http.ResponseWriter, r *http.Request) {
var providerRequest user.UserStatusRequest
if err := utils.ParseBody(r, &providerRequest); err != nil {
if err := pnd.ParseBody(r, &providerRequest); err != nil {
render.Render(w, r, err)
return
}
Expand Down Expand Up @@ -121,8 +120,8 @@ func (h *UserHandler) FindUsers(w http.ResponseWriter, r *http.Request) {
return
}

nickname := utils.ParseOptionalStringQuery(r, "nickname")
page, size, err := utils.ParsePaginationQueries(r, 1, 10)
nickname := pnd.ParseOptionalStringQuery(r, "nickname")
page, size, err := pnd.ParsePaginationQueries(r, 1, 10)
if err != nil {
render.Render(w, r, err)
return
Expand Down Expand Up @@ -177,7 +176,7 @@ func (h *UserHandler) UpdateMyProfile(w http.ResponseWriter, r *http.Request) {
uid := foundUser.FirebaseUID

var updateUserRequest user.UpdateUserRequest
if err := utils.ParseBody(r, &updateUserRequest); err != nil {
if err := pnd.ParseBody(r, &updateUserRequest); err != nil {
render.Render(w, r, err)
return
}
Expand Down Expand Up @@ -218,7 +217,7 @@ func (h *UserHandler) AddMyPets(w http.ResponseWriter, r *http.Request) {
uid := foundUser.FirebaseUID

var addPetsToOwnerRequest pet.AddPetsToOwnerRequest
if err := utils.ParseBody(r, &addPetsToOwnerRequest); err != nil {
if err := pnd.ParseBody(r, &addPetsToOwnerRequest); err != nil {
render.Render(w, r, err)
return
}
Expand Down
14 changes: 7 additions & 7 deletions cmd/server/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ func NewRouter(app *firebaseinfra.FirebaseApp) *chi.Mux {
userService := user.NewUserService(
postgres.NewUserPostgresStore(db),
postgres.NewPetPostgresStore(db),
mediaService,
*mediaService,
)

authService := auth.NewFirebaseBearerAuthService(authClient, userService)
authService := auth.NewFirebaseBearerAuthService(authClient, *userService)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
Expand All @@ -73,12 +73,12 @@ func NewRouter(app *firebaseinfra.FirebaseApp) *chi.Mux {
)

// Initialize handlers
authHandler := handler.NewAuthHandler(authService, kakaoinfra.NewKakaoClient())
userHandler := handler.NewUserHandler(userService, authService)
mediaHandler := handler.NewMediaHandler(mediaService)
breedHandler := handler.NewBreedHandler(breedService)
authHandler := handler.NewAuthHandler(authService, kakaoinfra.NewKakaoDefaultClient())
userHandler := handler.NewUserHandler(*userService, authService)
mediaHandler := handler.NewMediaHandler(*mediaService)
breedHandler := handler.NewBreedHandler(*breedService)
sosPostHandler := handler.NewSosPostHandler(*sosPostService, authService)
conditionHandler := handler.NewConditionHandler(conditionService)
conditionHandler := handler.NewConditionHandler(*conditionService)

// Register middlewares
r.Use(middleware.Logger)
Expand Down
4 changes: 2 additions & 2 deletions internal/domain/auth/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ type AuthService interface {

type FirebaseBearerAuthService struct {
authClient *auth.Client
userService user.UserServicer
userService user.UserService
}

func NewFirebaseBearerAuthService(authClient *auth.Client, userService user.UserServicer) *FirebaseBearerAuthService {
func NewFirebaseBearerAuthService(authClient *auth.Client, userService user.UserService) *FirebaseBearerAuthService {
return &FirebaseBearerAuthService{
authClient: authClient,
userService: userService,
Expand Down
6 changes: 0 additions & 6 deletions internal/domain/media/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,6 @@ type MediaService struct {
s3Client *s3infra.S3Client
}

type MediaServicer interface {
UploadMedia(file io.ReadSeeker, mediaType MediaType, fileName string) (*Media, *pnd.AppError)
CreateMedia(media *Media) (*Media, *pnd.AppError)
FindMediaByID(id int) (*Media, *pnd.AppError)
}

func NewMediaService(mediaStore MediaStore, s3Client *s3infra.S3Client) *MediaService {
return &MediaService{
mediaStore: mediaStore,
Expand Down
Loading

0 comments on commit b83b2c8

Please sign in to comment.