Przeglądaj źródła

feat: Adjusting directory structure

chris 2 lat temu
rodzic
commit
f434ab92bd

+ 2 - 2
.gitignore

@@ -1,5 +1,5 @@
 storage
 .idea
 *.log
-deploy/docker-compose/conf
-deploy/docker-compose/data
+scripts/docker-compose/conf
+scripts/docker-compose/data

+ 2 - 2
Makefile

@@ -5,8 +5,8 @@ init:
 
 .PHONY: mock
 mock:
-	mockgen -source=internal/service/user.go -destination mocks/service/user.go
-	mockgen -source=internal/repository/user.go -destination mocks/repository/user.go
+	mockgen -source=internal/service/user.go -destination test/mocks/service/user.go
+	mockgen -source=internal/repository/user.go -destination test/mocks/repository/user.go
 
 .PHONY: test
 test:

+ 5 - 0
cmd/job/wire_gen.go

@@ -9,6 +9,7 @@ package main
 import (
 	"github.com/go-nunu/nunu-layout-advanced/internal/job"
 	"github.com/go-nunu/nunu-layout-advanced/pkg/log"
+	"github.com/google/wire"
 	"github.com/spf13/viper"
 )
 
@@ -19,3 +20,7 @@ func newApp(viperViper *viper.Viper, logger *log.Logger) (*job.Job, func(), erro
 	return jobJob, func() {
 	}, nil
 }
+
+// wire.go:
+
+var JobSet = wire.NewSet(job.NewJob)

+ 1 - 1
internal/migration/migration.go → cmd/migration/migration.go

@@ -1,4 +1,4 @@
-package migration
+package main
 
 import (
 	"github.com/go-nunu/nunu-layout-advanced/internal/model"

+ 2 - 4
cmd/migration/wire.go

@@ -4,7 +4,6 @@
 package main
 
 import (
-	"github.com/go-nunu/nunu-layout-advanced/internal/migration"
 	"github.com/go-nunu/nunu-layout-advanced/internal/repository"
 	"github.com/go-nunu/nunu-layout-advanced/pkg/log"
 	"github.com/google/wire"
@@ -17,11 +16,10 @@ var RepositorySet = wire.NewSet(
 	repository.NewRepository,
 	repository.NewUserRepository,
 )
-var MigrateSet = wire.NewSet(migration.NewMigrate)
 
-func newApp(*viper.Viper, *log.Logger) (*migration.Migrate, func(), error) {
+func newApp(*viper.Viper, *log.Logger) (*Migrate, func(), error) {
 	panic(wire.Build(
 		RepositorySet,
-		MigrateSet,
+		NewMigrate,
 	))
 }

+ 7 - 3
cmd/migration/wire_gen.go

@@ -7,17 +7,21 @@
 package main
 
 import (
-	"github.com/go-nunu/nunu-layout-advanced/internal/migration"
 	"github.com/go-nunu/nunu-layout-advanced/internal/repository"
 	"github.com/go-nunu/nunu-layout-advanced/pkg/log"
+	"github.com/google/wire"
 	"github.com/spf13/viper"
 )
 
 // Injectors from wire.go:
 
-func newApp(viperViper *viper.Viper, logger *log.Logger) (*migration.Migrate, func(), error) {
+func newApp(viperViper *viper.Viper, logger *log.Logger) (*Migrate, func(), error) {
 	db := repository.NewDB(viperViper)
-	migrate := migration.NewMigrate(db, logger)
+	migrate := NewMigrate(db, logger)
 	return migrate, func() {
 	}, nil
 }
+
+// wire.go:
+
+var RepositorySet = wire.NewSet(repository.NewDB, repository.NewRedis, repository.NewRepository, repository.NewUserRepository)

+ 1 - 1
cmd/server/main.go

@@ -16,7 +16,7 @@ func main() {
 	if err != nil {
 		panic(err)
 	}
-	logger.Info("server start", zap.String("host", "http://127.0.0.1:"+conf.GetString("http.port")))
+	logger.Info("server start", zap.String("host", "http://localhost:"+conf.GetString("http.port")))
 
 	http.Run(app, fmt.Sprintf(":%d", conf.GetInt("http.port")))
 	defer cleanup()

+ 3 - 9
cmd/server/wire.go

@@ -16,12 +16,6 @@ import (
 	"github.com/spf13/viper"
 )
 
-var ServerSet = wire.NewSet(server.NewServerHTTP)
-
-var SidSet = wire.NewSet(sid.NewSid)
-
-var JwtSet = wire.NewSet(middleware.NewJwt)
-
 var HandlerSet = wire.NewSet(
 	handler.NewHandler,
 	handler.NewUserHandler,
@@ -41,11 +35,11 @@ var RepositorySet = wire.NewSet(
 
 func newApp(*viper.Viper, *log.Logger) (*gin.Engine, func(), error) {
 	panic(wire.Build(
-		ServerSet,
 		RepositorySet,
 		ServiceSet,
 		HandlerSet,
-		SidSet,
-		JwtSet,
+		server.NewServerHTTP,
+		sid.NewSid,
+		middleware.NewJwt,
 	))
 }

+ 0 - 6
cmd/server/wire_gen.go

@@ -39,12 +39,6 @@ func newApp(viperViper *viper.Viper, logger *log.Logger) (*gin.Engine, func(), e
 
 // wire.go:
 
-var ServerSet = wire.NewSet(server.NewServerHTTP)
-
-var SidSet = wire.NewSet(sid.NewSid)
-
-var JwtSet = wire.NewSet(middleware.NewJwt)
-
 var HandlerSet = wire.NewSet(handler.NewHandler, handler.NewUserHandler)
 
 var ServiceSet = wire.NewSet(service.NewService, service.NewUserService)

+ 4 - 3
internal/handler/user.go

@@ -2,6 +2,7 @@ package handler
 
 import (
 	"github.com/gin-gonic/gin"
+	"github.com/go-nunu/nunu-layout-advanced/internal/request"
 	"github.com/go-nunu/nunu-layout-advanced/internal/service"
 	"github.com/go-nunu/nunu-layout-advanced/pkg/helper/resp"
 	"github.com/pkg/errors"
@@ -28,7 +29,7 @@ func NewUserHandler(handler *Handler, userService service.UserService) UserHandl
 }
 
 func (h *userHandler) Register(ctx *gin.Context) {
-	req := new(service.RegisterRequest)
+	req := new(request.RegisterRequest)
 	if err := ctx.ShouldBindJSON(req); err != nil {
 		resp.HandleError(ctx, http.StatusBadRequest, 1, errors.Wrap(err, "invalid request").Error(), nil)
 		return
@@ -43,7 +44,7 @@ func (h *userHandler) Register(ctx *gin.Context) {
 }
 
 func (h *userHandler) Login(ctx *gin.Context) {
-	var req service.LoginRequest
+	var req request.LoginRequest
 	if err := ctx.ShouldBindJSON(&req); err != nil {
 		resp.HandleError(ctx, http.StatusBadRequest, 1, errors.Wrap(err, "invalid request").Error(), nil)
 		return
@@ -79,7 +80,7 @@ func (h *userHandler) GetProfile(ctx *gin.Context) {
 func (h *userHandler) UpdateProfile(ctx *gin.Context) {
 	userId := GetUserIdFromCtx(ctx)
 
-	var req service.UpdateProfileRequest
+	var req request.UpdateProfileRequest
 	if err := ctx.ShouldBindJSON(&req); err != nil {
 		resp.HandleError(ctx, http.StatusBadRequest, 1, errors.Wrap(err, "invalid request").Error(), nil)
 		return

+ 23 - 0
internal/request/user.go

@@ -0,0 +1,23 @@
+package request
+
+type RegisterRequest struct {
+	Username string `json:"username" binding:"required"`
+	Password string `json:"password" binding:"required"`
+	Email    string `json:"email" binding:"required,email"`
+}
+
+type LoginRequest struct {
+	Username string `json:"username" binding:"required"`
+	Password string `json:"password" binding:"required"`
+}
+
+type UpdateProfileRequest struct {
+	Nickname string `json:"nickname"`
+	Email    string `json:"email" binding:"required,email"`
+	Avatar   string `json:"avatar"`
+}
+
+type ChangePasswordRequest struct {
+	OldPassword string `json:"oldPassword" binding:"required"`
+	NewPassword string `json:"newPassword" binding:"required"`
+}

+ 7 - 28
internal/service/user.go

@@ -4,38 +4,17 @@ import (
 	"context"
 	"github.com/go-nunu/nunu-layout-advanced/internal/model"
 	"github.com/go-nunu/nunu-layout-advanced/internal/repository"
+	"github.com/go-nunu/nunu-layout-advanced/internal/request"
 	"github.com/pkg/errors"
 	"golang.org/x/crypto/bcrypt"
 	"time"
 )
 
-type RegisterRequest struct {
-	Username string `json:"username" binding:"required"`
-	Password string `json:"password" binding:"required"`
-	Email    string `json:"email" binding:"required,email"`
-}
-
-type LoginRequest struct {
-	Username string `json:"username" binding:"required"`
-	Password string `json:"password" binding:"required"`
-}
-
-type UpdateProfileRequest struct {
-	Nickname string `json:"nickname"`
-	Email    string `json:"email" binding:"required,email"`
-	Avatar   string `json:"avatar"`
-}
-
-type ChangePasswordRequest struct {
-	OldPassword string `json:"oldPassword" binding:"required"`
-	NewPassword string `json:"newPassword" binding:"required"`
-}
-
 type UserService interface {
-	Register(ctx context.Context, req *RegisterRequest) error
-	Login(ctx context.Context, req *LoginRequest) (string, error)
+	Register(ctx context.Context, req *request.RegisterRequest) error
+	Login(ctx context.Context, req *request.LoginRequest) (string, error)
 	GetProfile(ctx context.Context, userId string) (*model.User, error)
-	UpdateProfile(ctx context.Context, userId string, req *UpdateProfileRequest) error
+	UpdateProfile(ctx context.Context, userId string, req *request.UpdateProfileRequest) error
 }
 
 type userService struct {
@@ -50,7 +29,7 @@ func NewUserService(service *Service, userRepo repository.UserRepository) UserSe
 	}
 }
 
-func (s *userService) Register(ctx context.Context, req *RegisterRequest) error {
+func (s *userService) Register(ctx context.Context, req *request.RegisterRequest) error {
 	// 检查用户名是否已存在
 	if user, err := s.userRepo.GetByUsername(ctx, req.Username); err == nil && user != nil {
 		return errors.New("username already exists")
@@ -79,7 +58,7 @@ func (s *userService) Register(ctx context.Context, req *RegisterRequest) error
 	return nil
 }
 
-func (s *userService) Login(ctx context.Context, req *LoginRequest) (string, error) {
+func (s *userService) Login(ctx context.Context, req *request.LoginRequest) (string, error) {
 	user, err := s.userRepo.GetByUsername(ctx, req.Username)
 	if err != nil || user == nil {
 		return "", errors.Wrap(err, "failed to get user by username")
@@ -106,7 +85,7 @@ func (s *userService) GetProfile(ctx context.Context, userId string) (*model.Use
 	return user, nil
 }
 
-func (s *userService) UpdateProfile(ctx context.Context, userId string, req *UpdateProfileRequest) error {
+func (s *userService) UpdateProfile(ctx context.Context, userId string, req *request.UpdateProfileRequest) error {
 	user, err := s.userRepo.GetByID(ctx, userId)
 	if err != nil {
 		return errors.Wrap(err, "failed to get user by ID")

+ 1 - 1
deploy/build/Dockerfile → scripts/build/Dockerfile

@@ -3,7 +3,7 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk
 
 ARG APP_RELATIVE_PATH
 
-COPY .. /data/app
+COPY ../../deploy /data/app
 WORKDIR /data/app
 
 RUN rm -rf /data/app/bin/

+ 0 - 0
deploy/docker-compose/docker-compose.yml → scripts/docker-compose/docker-compose.yml


+ 0 - 0
mocks/repository/user.go → test/mocks/repository/user.go


+ 4 - 4
mocks/service/user.go → test/mocks/service/user.go

@@ -9,7 +9,7 @@ import (
 	reflect "reflect"
 
 	model "github.com/go-nunu/nunu-layout-advanced/internal/model"
-	service "github.com/go-nunu/nunu-layout-advanced/internal/service"
+	request "github.com/go-nunu/nunu-layout-advanced/internal/request"
 	gomock "github.com/golang/mock/gomock"
 )
 
@@ -52,7 +52,7 @@ func (mr *MockUserServiceMockRecorder) GetProfile(ctx, userId interface{}) *gomo
 }
 
 // Login mocks base method.
-func (m *MockUserService) Login(ctx context.Context, req *service.LoginRequest) (string, error) {
+func (m *MockUserService) Login(ctx context.Context, req *request.LoginRequest) (string, error) {
 	m.ctrl.T.Helper()
 	ret := m.ctrl.Call(m, "Login", ctx, req)
 	ret0, _ := ret[0].(string)
@@ -67,7 +67,7 @@ func (mr *MockUserServiceMockRecorder) Login(ctx, req interface{}) *gomock.Call
 }
 
 // Register mocks base method.
-func (m *MockUserService) Register(ctx context.Context, req *service.RegisterRequest) error {
+func (m *MockUserService) Register(ctx context.Context, req *request.RegisterRequest) error {
 	m.ctrl.T.Helper()
 	ret := m.ctrl.Call(m, "Register", ctx, req)
 	ret0, _ := ret[0].(error)
@@ -81,7 +81,7 @@ func (mr *MockUserServiceMockRecorder) Register(ctx, req interface{}) *gomock.Ca
 }
 
 // UpdateProfile mocks base method.
-func (m *MockUserService) UpdateProfile(ctx context.Context, userId string, req *service.UpdateProfileRequest) error {
+func (m *MockUserService) UpdateProfile(ctx context.Context, userId string, req *request.UpdateProfileRequest) error {
 	m.ctrl.T.Helper()
 	ret := m.ctrl.Call(m, "UpdateProfile", ctx, userId, req)
 	ret0, _ := ret[0].(error)

+ 5 - 5
test/server/handler/user_test.go

@@ -5,7 +5,8 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/go-nunu/nunu-layout-advanced/internal/handler"
-	"github.com/go-nunu/nunu-layout-advanced/mocks/service"
+	"github.com/go-nunu/nunu-layout-advanced/internal/request"
+	"github.com/go-nunu/nunu-layout-advanced/test/mocks/service"
 
 	"net/http"
 	"net/http/httptest"
@@ -15,7 +16,6 @@ import (
 	"github.com/gin-gonic/gin"
 	"github.com/go-nunu/nunu-layout-advanced/internal/middleware"
 	"github.com/go-nunu/nunu-layout-advanced/internal/model"
-	"github.com/go-nunu/nunu-layout-advanced/internal/service"
 	"github.com/go-nunu/nunu-layout-advanced/pkg/config"
 	"github.com/go-nunu/nunu-layout-advanced/pkg/log"
 	"github.com/golang/mock/gomock"
@@ -63,7 +63,7 @@ func TestUserHandler_Register(t *testing.T) {
 	ctrl := gomock.NewController(t)
 	defer ctrl.Finish()
 
-	params := service.RegisterRequest{
+	params := request.RegisterRequest{
 		Username: "xxx",
 		Password: "123456",
 		Email:    "xxx@gmail.com",
@@ -87,7 +87,7 @@ func TestUserHandler_Login(t *testing.T) {
 	ctrl := gomock.NewController(t)
 	defer ctrl.Finish()
 
-	params := service.LoginRequest{
+	params := request.LoginRequest{
 		Username: "xxx",
 		Password: "123456",
 	}
@@ -136,7 +136,7 @@ func TestUserHandler_UpdateProfile(t *testing.T) {
 	ctrl := gomock.NewController(t)
 	defer ctrl.Finish()
 
-	params := service.UpdateProfileRequest{
+	params := request.UpdateProfileRequest{
 		Nickname: "alan",
 		Email:    "alan@gmail.com",
 		Avatar:   "xxx",

+ 8 - 7
test/server/service/user_test.go

@@ -4,7 +4,8 @@ import (
 	"context"
 	"errors"
 	"fmt"
-	"github.com/go-nunu/nunu-layout-advanced/mocks/repository"
+	"github.com/go-nunu/nunu-layout-advanced/internal/request"
+	"github.com/go-nunu/nunu-layout-advanced/test/mocks/repository"
 	"os"
 	"testing"
 
@@ -53,7 +54,7 @@ func TestUserService_Register(t *testing.T) {
 	userService := service.NewUserService(srv, mockUserRepo)
 
 	ctx := context.Background()
-	req := &service.RegisterRequest{
+	req := &request.RegisterRequest{
 		Username: "testuser",
 		Password: "password",
 		Email:    "test@example.com",
@@ -76,7 +77,7 @@ func TestUserService_Register_UsernameExists(t *testing.T) {
 	userService := service.NewUserService(srv, mockUserRepo)
 
 	ctx := context.Background()
-	req := &service.RegisterRequest{
+	req := &request.RegisterRequest{
 		Username: "testuser",
 		Password: "password",
 		Email:    "test@example.com",
@@ -98,7 +99,7 @@ func TestUserService_Login(t *testing.T) {
 	userService := service.NewUserService(srv, mockUserRepo)
 
 	ctx := context.Background()
-	req := &service.LoginRequest{
+	req := &request.LoginRequest{
 		Username: "testuser",
 		Password: "password",
 	}
@@ -126,7 +127,7 @@ func TestUserService_Login_UserNotFound(t *testing.T) {
 	userService := service.NewUserService(srv, mockUserRepo)
 
 	ctx := context.Background()
-	req := &service.LoginRequest{
+	req := &request.LoginRequest{
 		Username: "testuser",
 		Password: "password",
 	}
@@ -173,7 +174,7 @@ func TestUserService_UpdateProfile(t *testing.T) {
 
 	ctx := context.Background()
 	userId := "123"
-	req := &service.UpdateProfileRequest{
+	req := &request.UpdateProfileRequest{
 		Nickname: "testuser",
 		Email:    "test@example.com",
 	}
@@ -200,7 +201,7 @@ func TestUserService_UpdateProfile_UserNotFound(t *testing.T) {
 
 	ctx := context.Background()
 	userId := "123"
-	req := &service.UpdateProfileRequest{
+	req := &request.UpdateProfileRequest{
 		Nickname: "testuser",
 		Email:    "test@example.com",
 	}