From c4ca073b4a82d4efa7aeefb33c77c8f1ad1db34c Mon Sep 17 00:00:00 2001 From: Arthur Lefebvre Date: Mon, 20 Oct 2025 18:06:42 +0200 Subject: [PATCH] Refactor: merge dto, mapper and routes --- internal/dto/bookpostcreate.go | 6 ------ internal/dto/booksearchget.go | 7 ------- internal/dto/bookuserget.go | 7 ------- internal/dto/userbookpostcreate.go | 5 ----- internal/dto/userlogin.go | 6 ------ internal/dto/usersignup.go | 6 ------ internal/mapper/bookpostcreate.go | 14 -------------- internal/mapper/booksearchget.go | 14 -------------- internal/mapper/bookuserget.go | 14 -------------- internal/mapper/userbookpostcreate.go | 13 ------------- internal/mapper/usersignup.go | 20 -------------------- internal/routes/bookpostcreate.go | 19 +++++++++++++++---- internal/routes/booksearchget.go | 20 ++++++++++++++++---- internal/routes/bookuserget.go | 20 ++++++++++++++++---- internal/routes/userbookpostcreate.go | 17 +++++++++++++---- internal/routes/userlogin.go | 8 ++++++-- internal/routes/usersignup.go | 25 +++++++++++++++++++++---- 17 files changed, 87 insertions(+), 134 deletions(-) delete mode 100644 internal/dto/bookpostcreate.go delete mode 100644 internal/dto/booksearchget.go delete mode 100644 internal/dto/bookuserget.go delete mode 100644 internal/dto/userbookpostcreate.go delete mode 100644 internal/dto/userlogin.go delete mode 100644 internal/dto/usersignup.go delete mode 100644 internal/mapper/bookpostcreate.go delete mode 100644 internal/mapper/booksearchget.go delete mode 100644 internal/mapper/bookuserget.go delete mode 100644 internal/mapper/userbookpostcreate.go delete mode 100644 internal/mapper/usersignup.go diff --git a/internal/dto/bookpostcreate.go b/internal/dto/bookpostcreate.go deleted file mode 100644 index 3671ce2..0000000 --- a/internal/dto/bookpostcreate.go +++ /dev/null @@ -1,6 +0,0 @@ -package dto - -type BookPostCreate struct { - Title string `json:"title" binding:"required,max=300"` - Author string `json:"author" binding:"max=100"` -} diff --git a/internal/dto/booksearchget.go b/internal/dto/booksearchget.go deleted file mode 100644 index 2477bef..0000000 --- a/internal/dto/booksearchget.go +++ /dev/null @@ -1,7 +0,0 @@ -package dto - -type BookSearchGet struct { - Title string `json:"title" binding:"required,max=300"` - Author string `json:"author" binding:"max=100"` - ID uint `json:"id"` -} diff --git a/internal/dto/bookuserget.go b/internal/dto/bookuserget.go deleted file mode 100644 index 67b4871..0000000 --- a/internal/dto/bookuserget.go +++ /dev/null @@ -1,7 +0,0 @@ -package dto - -type BookUserGet struct { - Title string `json:"title" binding:"required,max=300"` - Author string `json:"author" binding:"max=100"` - Rating int `json:"rating" binding:"min=0,max=10"` -} diff --git a/internal/dto/userbookpostcreate.go b/internal/dto/userbookpostcreate.go deleted file mode 100644 index 76f76c9..0000000 --- a/internal/dto/userbookpostcreate.go +++ /dev/null @@ -1,5 +0,0 @@ -package dto - -type UserBookPostCreate struct { - BookID uint `json:"bookId" binding:"required"` -} diff --git a/internal/dto/userlogin.go b/internal/dto/userlogin.go deleted file mode 100644 index 167ae14..0000000 --- a/internal/dto/userlogin.go +++ /dev/null @@ -1,6 +0,0 @@ -package dto - -type UserLogin struct { - Username string `json:"username" binding:"required,min=2,max=20"` - Password string `json:"password" binding:"required,min=6,max=100"` -} diff --git a/internal/dto/usersignup.go b/internal/dto/usersignup.go deleted file mode 100644 index 63d0688..0000000 --- a/internal/dto/usersignup.go +++ /dev/null @@ -1,6 +0,0 @@ -package dto - -type UserSignup struct { - Username string `json:"username" binding:"required,min=2,max=20"` - Password string `json:"password" binding:"required,min=6,max=100"` -} diff --git a/internal/mapper/bookpostcreate.go b/internal/mapper/bookpostcreate.go deleted file mode 100644 index 6267f1e..0000000 --- a/internal/mapper/bookpostcreate.go +++ /dev/null @@ -1,14 +0,0 @@ -package mapper - -import ( - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/model" -) - -func BookWsToDb(b dto.BookPostCreate, user *model.User) model.Book { - return model.Book{ - Title: b.Title, - Author: b.Author, - AddedBy: *user, - } -} diff --git a/internal/mapper/booksearchget.go b/internal/mapper/booksearchget.go deleted file mode 100644 index 8c8fc54..0000000 --- a/internal/mapper/booksearchget.go +++ /dev/null @@ -1,14 +0,0 @@ -package mapper - -import ( - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/model" -) - -func BookDbToWs(b *model.Book) dto.BookSearchGet { - return dto.BookSearchGet{ - Title: b.Title, - Author: b.Author, - ID: b.ID, - } -} diff --git a/internal/mapper/bookuserget.go b/internal/mapper/bookuserget.go deleted file mode 100644 index ffa2c64..0000000 --- a/internal/mapper/bookuserget.go +++ /dev/null @@ -1,14 +0,0 @@ -package mapper - -import ( - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/model" -) - -func UserBookDbToWs(b *model.UserBook) dto.BookUserGet { - return dto.BookUserGet{ - Title: b.Book.Title, - Author: b.Book.Author, - Rating: b.Rating, - } -} diff --git a/internal/mapper/userbookpostcreate.go b/internal/mapper/userbookpostcreate.go deleted file mode 100644 index 670e8b2..0000000 --- a/internal/mapper/userbookpostcreate.go +++ /dev/null @@ -1,13 +0,0 @@ -package mapper - -import ( - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/model" -) - -func UserBookWsToDb(ub dto.UserBookPostCreate, user *model.User) model.UserBook { - return model.UserBook{ - UserID: user.ID, - BookID: ub.BookID, - } -} diff --git a/internal/mapper/usersignup.go b/internal/mapper/usersignup.go deleted file mode 100644 index 02d112b..0000000 --- a/internal/mapper/usersignup.go +++ /dev/null @@ -1,20 +0,0 @@ -package mapper - -import ( - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/model" - "golang.org/x/crypto/bcrypt" -) - -func UserWsToDb(u dto.UserSignup) (model.User, error) { - user := model.User{ - Name: u.Username, - Password: "", - } - hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.DefaultCost) - if err != nil { - return user, err - } - user.Password = string(hashedPassword) - return user, nil -} diff --git a/internal/routes/bookpostcreate.go b/internal/routes/bookpostcreate.go index fcbf206..e8c9235 100644 --- a/internal/routes/bookpostcreate.go +++ b/internal/routes/bookpostcreate.go @@ -2,14 +2,17 @@ package routes import ( "git.artlef.fr/PersonalLibraryManager/internal/appcontext" - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/mapper" "git.artlef.fr/PersonalLibraryManager/internal/model" "git.artlef.fr/PersonalLibraryManager/internal/myvalidator" ) +type bookPostCreate struct { + Title string `json:"title" binding:"required,max=300"` + Author string `json:"author" binding:"max=100"` +} + func PostBookHandler(ac appcontext.AppContext) { - var book dto.BookPostCreate + var book bookPostCreate err := ac.C.ShouldBindJSON(&book) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) @@ -20,7 +23,7 @@ func PostBookHandler(ac appcontext.AppContext) { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } - bookDb := mapper.BookWsToDb(book, &user) + bookDb := bookWsToDb(book, &user) err = ac.Db.Model(&model.Book{}).Save(&bookDb).Error if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) @@ -28,3 +31,11 @@ func PostBookHandler(ac appcontext.AppContext) { } ac.C.String(200, "Success") } + +func bookWsToDb(b bookPostCreate, user *model.User) model.Book { + return model.Book{ + Title: b.Title, + Author: b.Author, + AddedBy: *user, + } +} diff --git a/internal/routes/booksearchget.go b/internal/routes/booksearchget.go index 57f5cc6..852f90a 100644 --- a/internal/routes/booksearchget.go +++ b/internal/routes/booksearchget.go @@ -5,18 +5,30 @@ import ( "strings" "git.artlef.fr/PersonalLibraryManager/internal/appcontext" - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/mapper" "git.artlef.fr/PersonalLibraryManager/internal/model" ) +type bookSearchGet struct { + Title string `json:"title" binding:"required,max=300"` + Author string `json:"author" binding:"max=100"` + ID uint `json:"id"` +} + func GetSearchBooksHandler(ac appcontext.AppContext) { searchterm := ac.C.Param("searchterm") var booksDb []model.Book ac.Db.Where("LOWER(title) LIKE ?", "%"+strings.ToLower(searchterm)+"%").Find(&booksDb) - books := make([]dto.BookSearchGet, 0) + books := make([]bookSearchGet, 0) for _, b := range booksDb { - books = append(books, mapper.BookDbToWs(&b)) + books = append(books, bookDbToWs(&b)) } ac.C.JSON(http.StatusOK, books) } + +func bookDbToWs(b *model.Book) bookSearchGet { + return bookSearchGet{ + Title: b.Title, + Author: b.Author, + ID: b.ID, + } +} diff --git a/internal/routes/bookuserget.go b/internal/routes/bookuserget.go index 53f6981..8dc1b44 100644 --- a/internal/routes/bookuserget.go +++ b/internal/routes/bookuserget.go @@ -4,12 +4,16 @@ import ( "net/http" "git.artlef.fr/PersonalLibraryManager/internal/appcontext" - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/mapper" "git.artlef.fr/PersonalLibraryManager/internal/model" "git.artlef.fr/PersonalLibraryManager/internal/myvalidator" ) +type bookUserGet struct { + Title string `json:"title" binding:"required,max=300"` + Author string `json:"author" binding:"max=100"` + Rating int `json:"rating" binding:"min=0,max=10"` +} + func GetMyBooksHanderl(ac appcontext.AppContext) { var userbooks []model.UserBook user, err := ac.GetAuthenticatedUser() @@ -18,9 +22,17 @@ func GetMyBooksHanderl(ac appcontext.AppContext) { return } ac.Db.Preload("Book").Where("user_id = ?", user.ID).Find(&userbooks) - booksDto := make([]dto.BookUserGet, 0) + booksDto := make([]bookUserGet, 0) for _, userbook := range userbooks { - booksDto = append(booksDto, mapper.UserBookDbToWs(&userbook)) + booksDto = append(booksDto, userBookDbToWs(&userbook)) } ac.C.JSON(http.StatusOK, booksDto) } + +func userBookDbToWs(b *model.UserBook) bookUserGet { + return bookUserGet{ + Title: b.Book.Title, + Author: b.Book.Author, + Rating: b.Rating, + } +} diff --git a/internal/routes/userbookpostcreate.go b/internal/routes/userbookpostcreate.go index 253e270..3365f24 100644 --- a/internal/routes/userbookpostcreate.go +++ b/internal/routes/userbookpostcreate.go @@ -4,14 +4,16 @@ import ( "net/http" "git.artlef.fr/PersonalLibraryManager/internal/appcontext" - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/mapper" "git.artlef.fr/PersonalLibraryManager/internal/model" "git.artlef.fr/PersonalLibraryManager/internal/myvalidator" ) +type userBookPostCreate struct { + BookID uint `json:"bookId" binding:"required"` +} + func PostUserBookHandler(ac appcontext.AppContext) { - var userbook dto.UserBookPostCreate + var userbook userBookPostCreate err := ac.C.ShouldBindJSON(&userbook) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) @@ -27,7 +29,7 @@ func PostUserBookHandler(ac appcontext.AppContext) { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } - userbookDb := mapper.UserBookWsToDb(userbook, &user) + userbookDb := userBookWsToDb(userbook, &user) err = ac.Db.Save(&userbookDb).Error if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) @@ -35,3 +37,10 @@ func PostUserBookHandler(ac appcontext.AppContext) { } ac.C.String(http.StatusOK, "Success") } + +func userBookWsToDb(ub userBookPostCreate, user *model.User) model.UserBook { + return model.UserBook{ + UserID: user.ID, + BookID: ub.BookID, + } +} diff --git a/internal/routes/userlogin.go b/internal/routes/userlogin.go index 4c724a8..6d49c55 100644 --- a/internal/routes/userlogin.go +++ b/internal/routes/userlogin.go @@ -5,7 +5,6 @@ import ( "net/http" "git.artlef.fr/PersonalLibraryManager/internal/appcontext" - "git.artlef.fr/PersonalLibraryManager/internal/dto" "git.artlef.fr/PersonalLibraryManager/internal/i18nresource" "git.artlef.fr/PersonalLibraryManager/internal/jwtauth" "git.artlef.fr/PersonalLibraryManager/internal/model" @@ -15,8 +14,13 @@ import ( "gorm.io/gorm" ) +type userLogin struct { + Username string `json:"username" binding:"required,min=2,max=20"` + Password string `json:"password" binding:"required,min=6,max=100"` +} + func PostLoginHandler(ac appcontext.AppContext) { - var user dto.UserLogin + var user userLogin err := ac.C.ShouldBindJSON(&user) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) diff --git a/internal/routes/usersignup.go b/internal/routes/usersignup.go index be3cd15..cb55c4a 100644 --- a/internal/routes/usersignup.go +++ b/internal/routes/usersignup.go @@ -2,20 +2,24 @@ package routes import ( "git.artlef.fr/PersonalLibraryManager/internal/appcontext" - "git.artlef.fr/PersonalLibraryManager/internal/dto" - "git.artlef.fr/PersonalLibraryManager/internal/mapper" "git.artlef.fr/PersonalLibraryManager/internal/model" "git.artlef.fr/PersonalLibraryManager/internal/myvalidator" + "golang.org/x/crypto/bcrypt" ) +type userSignup struct { + Username string `json:"username" binding:"required,min=2,max=20"` + Password string `json:"password" binding:"required,min=6,max=100"` +} + func PostSignupHandler(ac appcontext.AppContext) { - var user dto.UserSignup + var user userSignup err := ac.C.ShouldBindJSON(&user) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } - userDb, err := mapper.UserWsToDb(user) + userDb, err := userWsToDb(user) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return @@ -27,3 +31,16 @@ func PostSignupHandler(ac appcontext.AppContext) { } ac.C.String(200, "Success") } + +func userWsToDb(u userSignup) (model.User, error) { + user := model.User{ + Name: u.Username, + Password: "", + } + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.DefaultCost) + if err != nil { + return user, err + } + user.Password = string(hashedPassword) + return user, nil +}