Browse Source

新增创建项目接口

Ohio-HYF 3 years ago
parent
commit
ba026acba3

+ 34 - 0
db/project.go

@@ -0,0 +1,34 @@
+package db
+
+import (
+	"context"
+	"time"
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+)
+
+func CreateProject(ctx context.Context, newProject http_model.CreateProjectRequest) (*http_model.CreateProjectData, error) {
+	db := GetReadDB(ctx)
+	Project := gorm_model.ProjectInfo{
+		ProjectName:     newProject.ProjectName,
+		ProjectStatus:   1,
+		ProjectType:     newProject.ProjectType,
+		TalentType:      newProject.TalentType,
+		ProjectPlatform: newProject.ProjectPlatform,
+		ProjectForm:     newProject.ProjectForm,
+		// RecruitDdl:      newProject.RecruitDdl,
+		RecruitDdl:    time.Now().UTC().Local(),
+		ProjectDetail: newProject.ProjectDetail,
+		ContentType:   newProject.ContentType,
+		EnterpriseID:  newProject.EnterpriseID,
+		ProductID:     newProject.ProductID,
+	}
+	err := db.Create(&Project).Error
+	if err != nil {
+		return nil, err
+	}
+	data := &http_model.CreateProjectData{
+		ProjectID: Project.ProjectID,
+	}
+	return data, nil
+}

+ 24 - 0
db/project_photo.go

@@ -0,0 +1,24 @@
+package db
+
+import (
+	"context"
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+)
+
+func CreateProjectPhoto(ctx context.Context, projectID int, newProjectPhotos []http_model.CreateProjectPhoto) error {
+	db := GetReadDB(ctx)
+	projectPhotos := []gorm_model.ProjectPhoto{}
+	for _, newPhoto := range newProjectPhotos {
+		projectPhoto := gorm_model.ProjectPhoto{
+			PhotoUrl:  newPhoto.PhotoUrl,
+			ProjectID: projectID,
+		}
+		projectPhotos = append(projectPhotos, projectPhoto)
+	}
+	err := db.Create(&projectPhotos).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 29 - 0
db/recruit_strategy.go

@@ -0,0 +1,29 @@
+package db
+
+import (
+	"context"
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+)
+
+func CreateRecruitStrategy(ctx context.Context, projectID int, newRecruitStrategy []http_model.CreateRecruitStrategy) error {
+	db := GetReadDB(ctx)
+	recruitStrategys := []gorm_model.RecruitStrategy{}
+	for _, newStrategy := range newRecruitStrategy {
+		recruitStrategy := gorm_model.RecruitStrategy{
+			FeeForm:       newStrategy.FeeForm,
+			StrategyID:    newStrategy.StrategyID,
+			FollowersLow:  newStrategy.FollowersLow,
+			FollowersUp:   newStrategy.FollowersUp,
+			RecruitNumber: newStrategy.RecruitNumber,
+			Offer:         newStrategy.Offer,
+			ProjectID:     projectID,
+		}
+		recruitStrategys = append(recruitStrategys, recruitStrategy)
+	}
+	err := db.Create(&recruitStrategys).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 52 - 0
handler/project_create.go

@@ -0,0 +1,52 @@
+package handler
+
+import (
+	"fmt"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+
+	"github.com/gin-gonic/gin"
+)
+
+func WrapCreateProjectHandler(ctx *gin.Context) {
+	handler := newCreateProjectHandler(ctx)
+	baseRun(handler)
+}
+
+func newCreateProjectHandler(ctx *gin.Context) *CreateProjectHandler {
+	return &CreateProjectHandler{
+		req:  http_model.NewCreateProjectRequest(),
+		resp: http_model.NewCreateProjectResponse(),
+		ctx:  ctx,
+	}
+}
+
+type CreateProjectHandler struct {
+	req  *http_model.CreateProjectRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *CreateProjectHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *CreateProjectHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *CreateProjectHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *CreateProjectHandler) run() {
+	data := http_model.CreateProjectRequest{}
+	data = *h.req
+	res := service.CreateProject.CreateProject(h.ctx, data)
+	if res != nil {
+		fmt.Printf("%+v\n", res)
+	} else {
+		fmt.Printf("error\n")
+	}
+	h.resp.Data = res
+}
+func (h *CreateProjectHandler) checkParam() error {
+	return nil
+}

+ 16 - 14
model/gorm_model/project.go

@@ -1,3 +1,4 @@
+// Code generated by sql2gorm. DO NOT EDIT.
 package gorm_model
 package gorm_model
 
 
 import (
 import (
@@ -5,22 +6,23 @@ import (
 )
 )
 
 
 type ProjectInfo struct {
 type ProjectInfo struct {
-	ProjectId       int       `gorm:"column:project_id;type:int(11);primary_key" json:"project_id"`    // 项目id
-	ProjectName     string    `gorm:"column:project_name;type:varchar(50)" json:"project_name"`        // 项目名称
-	ProjectStatus   int       `gorm:"column:project_status;type:tinyint(4)" json:"project_status"`     // 项目状态,1-7分别代表创建中、待审核、招募中、待支付、失效、执行中、已结案
-	ProjectType     int       `gorm:"column:project_type;type:tinyint(4)" json:"project_type"`         // 项目类型,1代表全流程项目,2代表专项项目
-	ProjectPlatform int       `gorm:"column:project_platform;type:tinyint(4)" json:"project_platform"` // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
-	ProjectForm     int       `gorm:"column:project_form;type:tinyint(4)" json:"project_form"`         // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
-	TalentType      int       `gorm:"column:talent_type;type:int(11)" json:"talent_type"`              // 达人类型
-	RecruitDdl      time.Time `gorm:"column:recruit_ddl;type:datetime" json:"recruit_ddl"`             // 招募截止时间
-	ContentType     int       `gorm:"column:content_type;type:tinyint(4)" json:"content_type"`         // 内容形式,1代表图文,2代表视频
-	ProjectDetail   string    `gorm:"column:project_detail;type:varchar(300)" json:"project_detail"`   // 项目详情
-	EnterpriseId    int       `gorm:"column:enterprise_id;type:int(11)" json:"enterprise_id"`          // 所属企业id
-	ProductId       int       `gorm:"column:product_id;type:int(11)" json:"product_id"`                // 关联商品id
-	CreatedAt       time.Time `gorm:"column:created_at;type:datetime" json:"created_at"`               // 创建时间
-	UpdatedAt       time.Time `gorm:"column:updated_at;type:datetime" json:"updated_at"`               // 修改时间
+	ProjectID       int       `gorm:"column:project_id"` // 项目id
+	ProjectName     string    `gorm:"column:project_name"`           // 项目名称
+	ProjectStatus   int       `gorm:"column:project_status"`         // 项目状态,1-7分别代表创建中、待审核、招募中、待支付、失效、执行中、已结案
+	ProjectType     int       `gorm:"column:project_type"`           // 项目类型,1代表全流程项目,2代表专项项目
+	ProjectPlatform int       `gorm:"column:project_platform"`       // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	ProjectForm     int       `gorm:"column:project_form"`           // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
+	TalentType      int       `gorm:"column:talent_type"`            // 达人类型
+	RecruitDdl      time.Time `gorm:"column:recruit_ddl"`            // 招募截止时间
+	ContentType     int       `gorm:"column:content_type"`           // 内容形式,1代表图文,2代表视频
+	ProjectDetail   string    `gorm:"column:project_detail"`         // 项目详情
+	EnterpriseID    int       `gorm:"column:enterprise_id"`          // 所属企业id
+	ProductID       int       `gorm:"column:product_id"`             // 关联商品id
+	CreatedAt       time.Time `gorm:"column:created_at"`             // 创建时间
+	UpdatedAt       time.Time `gorm:"column:updated_at"`             // 修改时间
 }
 }
 
 
 func (m *ProjectInfo) TableName() string {
 func (m *ProjectInfo) TableName() string {
 	return "project_info"
 	return "project_info"
 }
 }
+

+ 6 - 4
model/gorm_model/project_photo.go

@@ -1,3 +1,4 @@
+// Code generated by sql2gorm. DO NOT EDIT.
 package gorm_model
 package gorm_model
 
 
 import (
 import (
@@ -5,12 +6,13 @@ import (
 )
 )
 
 
 type ProjectPhoto struct {
 type ProjectPhoto struct {
-	ProjectPhotoId int       `gorm:"column:project_photo_id;type:int(11);primary_key" json:"project_photo_id"` // 项目图片id
-	PhotoUrl       string    `gorm:"column:photo_url;type:varchar(1000)" json:"photo_url"`                     // 图片url
-	ProjectId      int       `gorm:"column:project_id;type:int(11)" json:"project_id"`                         // 所属项目id
-	CreatedAt      time.Time `gorm:"column:created_at;type:datetime" json:"created_at"`                        // 创建时间
+	ProjectPhotoID int       `gorm:"column:project_photo_id;primary_key"` // 项目图片id
+	PhotoUrl       string    `gorm:"column:photo_url"`                    // 图片url
+	ProjectID      int       `gorm:"column:project_id"`                   // 所属项目id
+	CreatedAt      time.Time `gorm:"column:created_at"`                   // 创建时间
 }
 }
 
 
 func (m *ProjectPhoto) TableName() string {
 func (m *ProjectPhoto) TableName() string {
 	return "project_photo"
 	return "project_photo"
 }
 }
+

+ 11 - 8
model/gorm_model/recruit_strategy.go

@@ -1,16 +1,19 @@
+// Code generated by sql2gorm. DO NOT EDIT.
 package gorm_model
 package gorm_model
 
 
+
 type RecruitStrategy struct {
 type RecruitStrategy struct {
-	RecruitStrategyId int `gorm:"column:recruit_strategy_id;type:int(11);primary_key" json:"recruit_strategy_id"` // 招募策略id
-	FeeForm           int `gorm:"column:fee_form;type:tinyint(4)" json:"fee_form"`                                // 稿费形式,1-3分别代表产品置换、固定稿费、自报价
-	StrategyId        int `gorm:"column:strategy_id;type:int(11)" json:"strategy_id"`                             // 策略id
-	FollowersLow      int `gorm:"column:followers_low;type:int(11)" json:"followers_low"`                         // 达人粉丝数下限
-	FollowersUp       int `gorm:"column:followers_up;type:int(11)" json:"followers_up"`                           // 达人粉丝数上限
-	RecruitNumber     int `gorm:"column:recruit_number;type:int(11)" json:"recruit_number"`                       // 招募数量
-	Offer             int `gorm:"column:offer;type:int(11)" json:"offer"`                                         // 报价
-	ProjectId         int `gorm:"column:project_id;type:int(11)" json:"project_id"`                               // 所属项目id
+	RecruitStrategyID int `gorm:"column:recruit_strategy_id;primary_key"` // 招募策略id
+	FeeForm           int `gorm:"column:fee_form"`                        // 稿费形式,1-3分别代表产品置换、固定稿费、自报价
+	StrategyID        int `gorm:"column:strategy_id"`                     // 策略id
+	FollowersLow      int `gorm:"column:followers_low"`                   // 达人粉丝数下限
+	FollowersUp       int `gorm:"column:followers_up"`                    // 达人粉丝数上限
+	RecruitNumber     int `gorm:"column:recruit_number"`                  // 招募数量
+	Offer             int `gorm:"column:offer"`                           // 报价
+	ProjectID         int `gorm:"column:project_id"`                      // 所属项目id
 }
 }
 
 
 func (m *RecruitStrategy) TableName() string {
 func (m *RecruitStrategy) TableName() string {
 	return "recruit_strategy"
 	return "recruit_strategy"
 }
 }
+

+ 45 - 0
model/http_model/project_create.go

@@ -0,0 +1,45 @@
+package http_model
+
+import "time"
+
+type CreateProjectPhoto struct {
+	PhotoUrl string `json:"photo_url"` // 图片url
+}
+
+type CreateRecruitStrategy struct {
+	FeeForm       int `json:"fee_form"`       // 稿费形式,1-3分别代表产品置换、固定稿费、自报价
+	StrategyID    int `json:"strategy_id"`    // 策略id
+	FollowersLow  int `json:"followers_low"`  // 达人粉丝数下限
+	FollowersUp   int `json:"followers_up"`   // 达人粉丝数上限
+	RecruitNumber int `json:"recruit_number"` // 招募数量
+	Offer         int `json:"offer"`          // 报价
+}
+
+type CreateProjectRequest struct {
+	ProjectName      string                  `json:"project_name"`      // 项目名称
+	ProjectStatus    int                     `json:"project_status"`    // 项目状态,1-7分别代表创建中、待审核、招募中、待支付、失效、执行中、已结案
+	ProjectType      int                     `json:"project_type"`      // 项目类型,1代表全流程项目,2代表专项项目
+	ProjectPlatform  int                     `json:"project_platform"`  // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	ProjectForm      int                     `json:"project_form"`      // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
+	TalentType       int                     `json:"talent_type"`       // 达人类型
+	RecruitDdl       time.Time               `json:"recruit_ddl"`       // 招募截止时间
+	ContentType      int                     `json:"content_type"`      // 内容形式,1代表图文,2代表视频
+	ProjectDetail    string                  `json:"project_detail"`    // 项目详情
+	RecruitStrategys []CreateRecruitStrategy `json:"recruit_strategys"` // 定价策略
+	ProjectPhotos    []CreateProjectPhoto    `json:"project_photos"`    // 项目图片
+	EnterpriseID     int                     `json:"enterprise_id"`     // 所属企业id
+	ProductID        int                     `json:"product_id"`        // 关联商品id
+}
+
+type CreateProjectData struct {
+	ProjectID int `json:"Project_id"` // 项目id
+}
+
+func NewCreateProjectRequest() *CreateProjectRequest {
+	return new(CreateProjectRequest)
+}
+func NewCreateProjectResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(CreateProjectData)
+	return resp
+}

+ 1 - 0
route/init.go

@@ -10,6 +10,7 @@ import (
 
 
 func InitRoute(r *gin.Engine) {
 func InitRoute(r *gin.Engine) {
 
 
+	r.POST("/project/create", handler.WrapCreateProjectHandler)
 	r.POST("/enterprise/create", handler.WrapCreateEnterpriseHandler)
 	r.POST("/enterprise/create", handler.WrapCreateEnterpriseHandler)
 	r.POST("/product/create", handler.WrapCreateProductHandler)
 	r.POST("/product/create", handler.WrapCreateProductHandler)
 	r.POST("/login", handler.WrapPasswordLoginHandler)
 	r.POST("/login", handler.WrapPasswordLoginHandler)

+ 30 - 0
service/project_create.go

@@ -0,0 +1,30 @@
+package service
+
+import (
+	"context"
+	"youngee_b_api/db"
+	"youngee_b_api/model/http_model"
+)
+
+var CreateProject *createProject
+
+type createProject struct {
+}
+
+func (*createProject) CreateProject(ctx context.Context, newProject http_model.CreateProjectRequest) *http_model.CreateProjectData {
+	data, err := db.CreateProject(ctx, newProject)
+	if err != nil {
+		return nil
+	} else {
+		err := db.CreateProjectPhoto(ctx, data.ProjectID, newProject.ProjectPhotos)
+		if err != nil {
+			return nil
+		} else {
+			err := db.CreateRecruitStrategy(ctx, data.ProjectID, newProject.RecruitStrategys)
+			if err != nil {
+				return nil
+			}
+		}
+	}
+	return data
+}