go练习 day01

DTO: note_dto.go

go 复制代码
package dto

import "king/model"

type NoteAddDTO struct {
	ID        uint
	Title     string  `json:"title" form:"title" binding:"required" message:"标题不能为空"`
	Content   string  `json:"content" form:"content" binding:"required" message:"内容不能为空"`
	UserID    uint    `json:"userId" form:"userId" binding:"required" message:"用户ID不能为空"`
}

func (m *NoteAddDTO)ConverToModel (iNote *model.Note) {
	iNote.Title = m.Title
	iNote.Content = m.Content
	iNote.UserID = m.UserID
}

Model:note.go

go 复制代码
package model

import "gorm.io/gorm"

type Note struct {
	gorm.Model
	Title    string `json:"title" gorm:"size:64;not null"`
	Content  string `json:"content" gorm:"not null"`
	UserID   uint   `json:"user_id" gorm:"not null"`
}

Dao:note_dao.go

go 复制代码
package dao

import (
	"king/model"
	"king/service/dto"
)

var noteDao *NoteDao

type NoteDao struct {
	BaseDao
}

func NewNoteDao() *NoteDao {
	if noteDao == nil {
		noteDao = &NoteDao{
			NewBaseDao(),
		}
	}
	return noteDao
}

func (m *NoteDao) AddNote(iNoteAddDTO *dto.NoteAddDTO) error{
	var iNote model.Note
	iNoteAddDTO.ConverToModel(&iNote)

	err := m.Orm.Create(&iNote).Error
	if err == nil {
		iNoteAddDTO.ID = iNote.ID
	}

	return err
}

Service:note_service.go

go 复制代码
package service

import (
	"king/dao"
	"king/service/dto"
)

var noteService *NoteService

type NoteService struct {
	BaseService
	Dao *dao.NoteDao
}

func NewNoteService() *NoteService{
	if noteService == nil {
		noteService = &NoteService{
			Dao: dao.NewNoteDao(),
		}
	}

	return noteService
}

func (m *NoteService) AddNote(iNoteAddDTO *dto.NoteAddDTO) error{
	return m.Dao.AddNote(iNoteAddDTO)
}

API:note_api.go

go 复制代码
package api

import (
	"king/service"
	"king/service/dto"
	"net/http"

	"github.com/gin-gonic/gin"
)

const (
	ERR_CODE_ADD_NOTE       = 10021
)

type NoteApi struct {
	BaseApi
	Service *service.NoteService
}

func NewNoteApi() NoteApi{
	return NoteApi{
		BaseApi: NewBaseApi(),
		Service: service.NewNoteService(),
	}
}

func (m NoteApi)AddNote(c *gin.Context) {
	var iNoteAddDTO dto.NoteAddDTO
	if err := m.BuildRequest(BuildRequestOption{Ctx: c, DTO: &iNoteAddDTO}).GetError(); err != nil {
		return 
	}

	err := m.Service.AddNote(&iNoteAddDTO)
	if err != nil {
		m.ServerFail(ResponseJson{
			Code: ERR_CODE_ADD_NOTE,
			Status: http.StatusBadRequest,
			Msg: "新增文章失败",
		})
		return
	}

	m.OK(ResponseJson{
		Code: SUCCESS,
		Msg: "新增文章成功",
		Data: iNoteAddDTO,
	})
}

Router:note.go

go 复制代码
package router

import (
	"king/api"

	"github.com/gin-gonic/gin"
)

func InitNoteRoutes() {
	RegistRoute(func(rgPublic *gin.RouterGroup, rgAuth *gin.RouterGroup) {
		noteApi := api.NewNoteApi()

		rgAuthNote := rgAuth.Group("note")
		{
			rgAuthNote.POST("", noteApi.AddNote)
		}
	})
}

Routers:router.go

go 复制代码
func initBasePlatformRoutes() {
	InitNoteRoutes()
}

db:AutoMigrate

go 复制代码
db.AutoMigrate(&model.Note{})

效果


相关推荐
iCxhust6 小时前
c# U盘映像生成工具
开发语言·单片机·c#
yangzhi_emo7 小时前
ES6笔记2
开发语言·前端·javascript
emplace_back8 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
jz_ddk8 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶8 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
xiaolang_8616_wjl8 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
收破烂的小熊猫~8 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
nananaij9 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
阿蒙Amon9 小时前
为什么 12 版仍封神?《C# 高级编程》:从.NET 5 到实战架构,进阶者绕不开的必修课
开发语言·c#