命令记不住

登陆

WebGin 简单框架 - models

WebGin简单框架-models

Web目录结构

C:.
├─.idea
│  └─dictionaries
├─controllers
├─dao
│  ├─mysql
│  └─redis
├─dist
│  └─static
│      ├─css
│      ├─fonts
│      └─js
├─logger
├─logic
├─models
├─pkg
│  ├─myJWT
│  └─snowflake
├─routers
├─setting
└─main.go

1.answer.go

answer.go

package models

import "time"

type Answer struct {
	AnswerID    uint64    `json:"answer_id,string" db:"answer_id"`
	AuthorID    uint64    `json:"author_id,string" db:"author_id"`
	QuestionID  uint64    `json:"question_id,string" db:"question_id"`
	Content     string    `json:"content" db:"content"`
	VoteUpCount int       `json:"vote_up_count" db:"vote_up_count"`
	Status      int8      `json:"status" db:"status"`
	CreateTime  time.Time `json:"create_time" db:"create_time"`
	UpdateTime  time.Time `json:"update_time" db:"update_time"`
}

type ApiAnswer struct {
	Answer
	AuthorName string `json:"author_name" db:"author_name"`
}

type ApiAnswerList struct {
	AnswerList []*ApiAnswer `json:"answer_list"`
	TotalCount int          `json:"total_count"`
}

2.category.go

category.go

package models

/*
CREATE TABLE `category` (

	`id` int(11) NOT NULL AUTO_INCREMENT,
	`category_id` int(10) unsigned NOT NULL,
	`category_name` varchar(128) COLLATE utf8mb4_general_ci NOT NULL,
	`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
	`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	PRIMARY KEY (`id`),
	UNIQUE KEY `idx_category_id` (`category_id`),
	UNIQUE KEY `idx_category_name` (`category_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
*/
type Category struct {
	CategoryID   int32  `json:"id" db:"category_id"`
	CategoryName string `json:"name" db:"category_name"`
}

3.question.go

question.go

package models

import "time"

type Question struct {
	QuestionID uint64    `json:"question_id,string" db:"question_id"`
	AuthorID   uint64    `json:"author_id,string" db:"author_id"`
	CategoryID int32     `json:"category_id" db:"category_id"`
	Status     int8      `json:"status" db:"status"`
	Caption    string    `json:"caption" db:"caption"`
	Content    string    `json:"content" db:"content"`
	CreateTime time.Time `json:"create_time" db:"create_time"`
}

type ApiQuestion struct {
	Question
	AuthorName string `json:"author_name"`
}

type ApiQuestionDetail struct {
	Question
	AuthorName   string `json:"author_name"`
	CategoryName string `json:"category_name"`
}

type ApiQuestionList struct {
	QuestionList []*ApiQuestion `json:"question_list"`
	TotalCount   int            `json:"total_count"`
}

4.user.go

user.go

package models

import (
	"encoding/json"
	"errors"
)

// 定义结构体信息

type SignUpForm struct {
	UserName        string `json:"username"`
	Password        string `json:"password"`
	ConfirmPassword string `json:"confirm_password"`
}

// UnmarshalJSON SignUpForm类型 自定义JSON反序列化的方法
func (s *SignUpForm) UnmarshalJSON(data []byte) (err error) {
	required := struct {
		UserName        string `json:"username"`
		Password        string `json:"password"`
		ConfirmPassword string `json:"confirm_password"`
	}{}
	err = json.Unmarshal(data, &required)
	if err != nil {
		return
	} else if len(required.UserName) == 0 {
		err = errors.New("缺少必填字段username")
	} else if len(required.Password) == 0 {
		err = errors.New("缺少必填字段password")
	} else if required.Password != required.ConfirmPassword {
		err = errors.New("两次密码不一致")
	} else {
		s.UserName = required.UserName
		s.Password = required.Password
		s.ConfirmPassword = required.ConfirmPassword
	}
	return
}

type User struct {
	UserID   uint64 `json:"user_id" db:"user_id"`
	UserName string `json:"username" db:"username"`
	Password string `json:"password" db:"password"`
}
推荐阅读