四十一、完成内容添加功能(使用go测试方法)

目录

一、添加model

二、完成相关dao

三、使用测试类进行测试

1、把光标防止要测试的方法上,右击并选择

2、自动会生成一个以dao文件加_test命名的文件

3、在其中完善方法并完成测试

四、完成content_create_handle


一、添加model

按数据库字段以及字段格式完成model

type ContentDetails struct {
	ID             int64     `gorm:"column:id;primary_key"`
	ContentID      string    `gorm:"column:content_id"`
	Title          string    `gorm:"column:title"`
	Description    string    `gorm:"column:description"`
	Author         string    `gorm:"column:author"`
	VideoUrl       string    `gorm:"column:video_url"`
	Thumbnail      string    `gorm:"column:thumbnail"`
	Category       string    `gorm:"column:category"`
	Duration       int64     `gorm:"column:duration"`
	Resolution     string    `gorm:"column:resolution"`
	FileSize       int64     `gorm:"column:fileSize"`
	Format         string    `gorm:"column:format"`
	Quality        int64     `gorm:"column:quality"`
	ApprovalStatus int64     `gorm:"column:approval_status"`
	Ct             time.Time `gorm:"column:created_at"`
	Ut             time.Time `gorm:"column:updated_at"`
}

func (ContentDetails) TableName() string {
	table := "cms_account.content_details"
	return table
}

二、完成相关dao

type ContentDetailsDao struct {
	db *gorm.DB
}

func NewContentDetailsDao(db *gorm.DB) *ContentDetailsDao {
	return &ContentDetailsDao{db: db}
}

func (c *ContentDetailsDao) Create(content model.ContentDetails) error {
	if err := c.db.Create(&content).Error; err != nil {
		fmt.Printf("create contentDetails failed, err:%v\n", err)
		return err
	}
	return nil
}

三、使用测试类进行测试

1、把光标防止要测试的方法上,右击并选择

2、自动会生成一个以dao文件加_test命名的文件
3、在其中完善方法并完成测试
// 添加连接数据库函数
func connDB() *gorm.DB {
	mysqlDB, err := gorm.Open(mysql.Open("root:rootroot@tcp(localhost:3306)/?charset=utf8mb4&parseTime=True&loc=Local"))
	if err != nil {
		panic(err)
	}
	db, err := mysqlDB.DB()
	if err != nil {
		panic(err)
	}
	//最大连接数
	db.SetMaxOpenConns(4)
	//最大空闲连接,一般为最大连接数/2
	db.SetMaxIdleConns(2)
	mysqlDB = mysqlDB.Debug()
	return mysqlDB
}

func TestContentDetailsDao_Create(t *testing.T) {
	type fields struct {
		db *gorm.DB
	}
	type args struct {
		content model.ContentDetails
	}
	tests := []struct {
		name    string
		fields  fields
		args    args
		wantErr bool
	}{
		{ //自定义名称
			name: "内容插入",
			//选择db为上面的connDB函数
			fields: fields{
				db: connDB(),
			},
			args: args{
				//选择入参
				content: model.ContentDetails{

					Title: "test",
					Ct:    time.Now(),
					Ut:    time.Now(),
				},
			},
			wantErr: false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			c := &ContentDetailsDao{
				db: tt.fields.db,
			}
			if err := c.Create(tt.args.content); (err != nil) != tt.wantErr {
				t.Errorf("Create() error = %v, wantErr %v", err, tt.wantErr)
			}
		})
	}
}

四、完成content_create_handle

package services

import (
	"ContentSystem/internal/dao"
	"ContentSystem/internal/model"
	"github.com/gin-gonic/gin"
	"net/http"
	"time"
)

// 入参
type ContentCreateReq struct {
	Title          string    `json:"title" binding:"required"`
	Description    string    `json:"description" binding:"required"`
	Author         string    `json:"author" binding:"required"`
	VideoUrl       string    `json:"video_url"`
	Thumbnail      string    `json:"thumbnail"`
	Category       string    `json:"category"`
	Duration       int64     `json:"duration"`
	Resolution     string    `json:"resolution"`
	FileSize       int64     `json:"fileSize"`
	Format         string    `json:"format"`
	Quality        int64     `json:"quality"`
	ApprovalStatus int64     `json:"approval_status"`
	UpdatedAt      time.Time `json:"updated_at"`
	CreatedAt      time.Time `json:"created_at"`
}

// 回包
type ContentCreateRsp struct {
	Message string `json:"message"`
}

func (c *CmsApp) ContentCreate(ctx *gin.Context) {
	var req ContentCreateReq
	if err := ctx.ShouldBindJSON(&req); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	contentDetailsDao := dao.NewContentDetailsDao(c.db)
	err := contentDetailsDao.Create(model.ContentDetails{
		Title:          req.Title,
		Description:    req.Description,
		Author:         req.Author,
		VideoUrl:       req.VideoUrl,
		Thumbnail:      req.Thumbnail,
		Category:       req.Category,
		Duration:       req.Duration,
		Resolution:     req.Resolution,
		FileSize:       req.FileSize,
		Format:         req.Format,
		Quality:        req.Quality,
		ApprovalStatus: req.ApprovalStatus,
		Ct:             time.Now(),
		Ut:             time.Now(),
	})
	if err != nil {
		ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
	ctx.JSON(http.StatusOK, gin.H{
		"code":    http.StatusOK,
		"message": "ok",
		"data": &ContentCreateRsp{
			Message: "ok",
		},
	})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/881866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 如何实现搜索功能:本地搜索?数据模型如何设计?数据如何展示和保存?

目录 效果图为什么需要搜索功能如何设计搜索本地的功能,如何维护呢?总结 一、效果图 二、为什么需要搜索功能 找一个选项,需要花非常多的时间,并且每次都需要指导客户在哪里,现在只要让他们搜索一下就可以。这也是模…

基于SpringBoot+Vue的剧本杀管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

AIGC7: 高通骁龙AIPC开发者沙龙过程记录A

图中是一座高耸的宫殿。 就像AI的出现,慢慢初现端倪,头角峥嵘。 背景 一直以来都比较关注AI的发展,有幸再一次参加异常AI的盛会。 从我的角度看。 高通是一家生产芯片的公司,国内的小米,荣耀,Oppo , Vi…

华为为什么要做三折叠屏手机?

前些天我做了一条视频,关于讲华W的新的三折叠屏手机。我说我有点失望,结果引起了华W的同事的一些关注。于是,华W几位高管都跑过来,跟我解释为什么会出现这样的一个状态。 我才知道,这款手机他们其实是亏着钱在卖的。因…

【测试】——Selenium API (万字详解)

📖 前言:本文详细介绍了如何利用Selenium进行Web自动化测试,包括定位元素(如cssSelector和xpath)、常用操作函数(如点击、输入等)、窗口管理、键盘鼠标事件和浏览器导航,以及处理弹窗…

图说GPT网络结构(参数量与计算量估计)

现在AI领域的主流模型几乎都是Transformer网络架构衍生而来。大热的LLM中的生成类模型很多都是来自于Transformer的变体,即decoder only架构。而GPT就是该类中的经典模型。尽管现在变体甚多,但大多没有根本性地改变其套路。 为了阐述方便,首…

音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

数据安全治理

数据安全治理 1.数据安全治理2.终端数据安全加密类权限控制类终端DLP类桌面虚拟化安全桌面 3.网络数据安全4.存储数据安全5.应用数据安全6.其他话题数据脱敏水印与溯源 7.UEBA8.CASB 1.数据安全治理 数据安全治理最为重要的是进行数据安全策略和流程制订。在企业或行业内经常发…

[大语言模型-论文精读] 以《黑神话:悟空》为研究案例探讨VLMs能否玩动作角色扮演游戏?

1. 论文简介 论文《Can VLMs Play Action Role-Playing Games? Take Black Myth Wukong as a Study Case》是阿里巴巴集团的Peng Chen、Pi Bu、Jun Song和Yuan Gao,在2024.09.19提交到arXiv上的研究论文。 论文: https://arxiv.org/abs/2409.12889代码和数据: h…

通过logstash同步elasticsearch数据

1 概述 logstash是一个对数据进行抽取、转换、输出的工具,能对接多种数据源和目标数据。本文介绍通过它来同步elasticsearch的数据。 2 环境 实验仅仅需要一台logstash机器和两台elasticsearch机器(elasticsearch v7.1.0)。本文用docker来模…

人工智能不是人工“制”能

文/孟永辉 如果你去过今年在上海举办的世界人工智能大会,就会知道当下的人工智能行业在中国是多么火爆。 的确,作为第四次工业革命的重要组成部分,人工智能愈发引起越来越多的重视。 不仅仅是在中国,当今世界的很多工业强国都在将…

HarmonyOS 速记

目录 装饰器Entry(入口)Component(组件)Builder(构建)State(状态)Prop(属性)Preview(预览)PreviewerInspector 结构体structbuild自定义组件自定义 Custom 组件 export(导出) & import(导入) Page(页面)生命周期aboutToAppear 数据Array(数组/集合)Map(映射) 容器&#xff…

Wireshark学习使用记录

wireshark 是一个非常好用的抓包工具,使用 wireshark 工具抓包分析,是学习网络编程必不可少的一项技能。 原理 Wireshark使用的环境大致分为两种:一种是电脑直连互联网的单机环境,另外一种就是应用比较多的互联网环境,也就是连接…

nginx模块篇(四)

文章目录 四、Nginx的扩展模块4.1. Lua4.1.1 概念4.1.2 特性4.1.3 应用场景4.1.4 Lua的安装4.1.5 Lua的语法4.1.5.1 第一个Lua程序4.1.5.2 Lua的注释4.1.5.3 标识符4.1.5.4 关键字4.1.5.5 运算符4.1.5.6 全局变量&局部变量4.1.5.7 Lua数据类型nilbooleannumberstringtablef…

Windows本地连接远程服务器并创建新用户详细记录

前提可知: (1)服务器IP地址:x.x.x.x (2)服务器名称:root(一般默认为root,当然也有别的名称) (3)服务器登陆密码:**** 一、…

都市女生热衷找搭子的原因?只因对生活的热爱和追求

在繁华的都市中,有一个叫小悠的女生。她独自在这个忙碌的世界里闯荡,常常感到孤独。 有一天,小悠想去看一场期待已久的演唱会,可是身边的朋友要么没时间,要么对这场演唱会不感兴趣。就在她感到失落的时候,她…

使用llama.cpp 在推理MiniCPM-1.2B模型

llama.cpp 是一个开源项目,它允许用户在C中实现与LLaMA(Large Language Model Meta AI)模型的交互。LLaMA模型是由Meta Platforms开发的一种大型语言模型,虽然llama.cpp本身并不包含LLaMA模型的训练代码或模型权重,但它…

html 几行的空间分成3个区域

1.代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>三个区域示例</title> …

【工具】Windows|两款开源桌面窗口管理小工具Deskpins和WindowTop

总结 Deskpins 功能单一&#xff0c;拖到窗口上窗口就可以置顶并且标记钉子标签&#xff0c;大小 104 KB&#xff0c;开源位置&#xff1a;https://github.com/thewhitegrizzli/DeskPins/releases WindowTop 功能完善全面强大&#xff0c;包括透明度、置顶、选区置顶等一系列功…

【我的 PWN 学习手札】tcache extend

目录 前言 一、利用手法 二、流程演示 &#xff08;1&#xff09;三块物理相邻的堆块 &#xff08;2&#xff09;溢出修改 size &#xff08;3&#xff09;释放该 chunk &#xff08;4&#xff09;重新申请该 chunk &#xff08;5&#xff09;释放第三块 chunk&#x…