16. 获取社区详情

文章目录

  • 一、建表、插入测试数据、并生成对应的model
  • 二、添加路由,以及controller、logic、dao三层分别实现对应代码
  • 三、编译运行

登录之后,我们可以发表帖子,但是发表帖子之前,需要先选择一个频道,可以理解是社区分类或者标签分类。这个数据来源是从服务端获取的,本节我们就实现这个功能。
在这里插入图片描述

这是一个最基本的CRUD功能,直接上代码吧,其中dev.yamlmain.go文件有改动是因为我想换为开发环境运行,这样可以直接调试以及观察控制台日志。
在这里插入图片描述

一、建表、插入测试数据、并生成对应的model

首先我们需要创建对应的表和model,这里需要说明的是,我们将和DB交互的model以及和前端交互的model使用了同一个,实际工作中一般是不会这样的。

  • DB交互的model,字段应该和表中的映射
  • 和前端交互的model,一般是和前端对齐约定好的requestresponse结构

bluebell_community.sql

DROP TABLE IF EXISTS `community`;create table community
(id             int auto_increment primary key,community_id   int unsigned                        not null,community_name varchar(128)                        not null,introduction   varchar(256)                        not null,create_time    timestamp default CURRENT_TIMESTAMP not null,update_time    timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP,constraint idx_community_id  unique (community_id),constraint idx_community_name unique (community_name)
) collate = utf8mb4_general_ci;INSERT INTO community (id, community_id, community_name, introduction, create_time, update_time) VALUES (1, 1, 'Go', 'Golang', '2016-11-01 08:10:10', '2016-11-01 08:10:10');
INSERT INTO community (id, community_id, community_name, introduction, create_time, update_time) VALUES (2, 2, 'leetcode', '刷题刷题刷题', '2024-01-01 08:00:00', '2024-01-01 08:00:00');
INSERT INTO community (id, community_id, community_name, introduction, create_time, update_time) VALUES (3, 3, 'CS:GO', 'Rush B。。。', '2018-08-07 08:30:00', '2018-08-07 08:30:00');
INSERT INTO community (id, community_id, community_name, introduction, create_time, update_time) VALUES (4, 4, 'LOL', '欢迎来到英雄联盟!', '2016-01-01 08:00:00', '2016-01-01 08:00:00');select * from community;

在这里插入图片描述

使用如下地址https://www.qetool.com/sql_json_go/sql.html,直接将建表语句转为对应的结构体。

models/community.go

注意:因为前端读取社区id是表中community_id字段,name是表中community_name字段,所以下面这些字段的JSON tag我做了修改。

  • id:unique_id
  • community_id:id
  • community_name:name
package modelsimport "time"type Community struct {ID            int64     `gorm:"column:id" db:"id" json:"unique_id" form:"id"`CommunityId   int64     `gorm:"column:community_id" db:"community_id" json:"id" form:"community_id"`CommunityName string    `gorm:"column:community_name" db:"community_name" json:"name" form:"community_name"`Introduction  string    `gorm:"column:introduction" db:"introduction" json:"introduction" form:"introduction"`CreateTime    time.Time `gorm:"column:create_time" db:"create_time" json:"create_time" form:"create_time"`UpdateTime    time.Time `gorm:"column:update_time" db:"update_time" json:"update_time" form:"update_time"`
}func (Community) TableName() string {return "community"
}

二、添加路由,以及controller、logic、dao三层分别实现对应代码

添加路由,获取社区列表、获取指定社区详情

router/route.go

v1.GET("/community", controller.CommunityHandler)
v1.GET("/community/:id", controller.CommunityDetailHandler)

添加两个handler

controller/community.go

package controllerimport ("bluebell/logic""strconv""github.com/gin-gonic/gin""go.uber.org/zap"
)// ---- 跟社区相关的 ----func CommunityHandler(c *gin.Context) {// 查询到所有的社区(community_id, community_name) 以列表的形式返回data, err := logic.GetCommunityList()if err != nil {zap.L().Error("logic.GetCommunityList() failed", zap.Error(err))ResponseError(c, CodeServerBusy) // 不轻易把服务端报错暴露给外面return}ResponseSuccess(c, data)
}// CommunityDetailHandler 社区分类详情
func CommunityDetailHandler(c *gin.Context) {// 1. 获取社区ididStr := c.Param("id") // 获取URL参数id, err := strconv.ParseInt(idStr, 10, 64)if err != nil {ResponseError(c, CodeInvalidParam)return}// 2. 根据id获取社区详情data, err := logic.GetCommunityDetail(id)if err != nil {zap.L().Error("logic.GetCommunityList() failed", zap.Error(err))ResponseError(c, CodeServerBusy) // 不轻易把服务端报错暴露给外面return}ResponseSuccess(c, data)
}

添加对应的logic,尽管没有其他业务逻辑,就是简单的调用一下dao层而已,但是为了规范,我们还是加了logic这层,而不是让controller层直接调用dao层。

logic/community.go

package logicimport ("bluebell/dao/mysql""bluebell/models"
)func GetCommunityList() ([]*models.Community, error) {// 查数据库 查找到所有的community 并返回return mysql.GetCommunityList()
}func GetCommunityDetail(id int64) (*models.Community, error) {return mysql.GetCommunityDetailByID(id)
}

DB获取数据

dao/mysql/community.go

package mysqlimport ("bluebell/models""go.uber.org/zap""gorm.io/gorm"
)func GetCommunityList() (communityList []*models.Community, err error) {res := make([]*models.Community, 0)err = db.Model(models.Community{}).Find(&res).Errorif err != nil {zap.L().Error("server inner error")return nil, ErrorInnerServer}if len(res) == 0 {zap.L().Warn("there is no community in db")return res, nil}communityList = resreturn
}// GetCommunityDetailByID 根据ID查询社区详情
func GetCommunityDetailByID(id int64) (community *models.Community, err error) {// 这里需要注意:尽管返回值中已经定义了community变量,但是并没有初始化,所以这里初始化它//不初始化就使用会报错的community = new(models.Community)err = db.Where("community_id = ?", id).Find(community).Errorif err != nil {if err == gorm.ErrRecordNotFound {err = ErrorInvalidID}}return community, err
}

三、编译运行

可以看到,有四个社区标签可以选择了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是高级编程语言?——跟老吕学Python编程

什么是高级编程语言?——跟老吕学Python编程 高级编程语言简介高级编程语言发展历程高级编程语言特点高级编程语言分类命令式语言函数式语言逻辑式语言面向对象语言 常见的高级编程语言及其特点和应用领域高级编程语言性能分析高级编程语言的工作方式 高级编程语言简…

MUMU模拟器12连logcat的方法

大家好,我是阿赵。   在开发手机游戏的时候,在真机上会出现各种问题,在查询问题的时候,安卓手机需要用adb连接来连接手机看logcat输出分析问题。但由于连接手机比较麻烦,所以我都习惯在电脑用安卓模拟器来测试。   …

R语言基础的代码语法解译笔记

1、双冒号,即:“::” 要使用某个包里的函数,通常做法是先加载(library)包,再调用函数。最新加载的包的namespace会成为最新的enviroment,某些情况下可能影响函数的结果。而package name::funct…

角蜥优化算法 (Horned Lizard Optimization Algorithm ,HLOA)求解无人机路径优化

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。 二、算法介…

Appium系列(1)安装启动Appium

Appium环境准备 Mac电脑jdk环境AndroidSDK环境node>8.1.0(最好用最新版本) 安装命令 npm i -g appium安装不成功请检查node 版本是否正确 安装成功命令行输入appium回车查看 安装驱动程序 1、先检查当前驱动情况 通过 appium driver list 进行…

【go语言开发】redis简单使用

本文主要介绍redis安装和使用。首先安装redis依赖库,这里是v8版本;然后连接redis,完成基本配置;最后测试封装的工具类 文章目录 安装redis依赖库连接redis和配置工具类封装代码测试 欢迎大家访问个人博客网址:https://…

系统学习c++类和对象——深度理解默认成员函数

前言:类和对象是面向对象语言的重要概念。 c身为一门既面向过程,又面向对象的语言。 想要学习c, 首先同样要先了解类和对象。 本节就类和对象的几种构造函数相关内容进行深入的讲解。 目录 类和对象的基本概念 封装 类域和类体 访问限定符…

Everything:文件查找工具,一搜即得

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍①Everything②核心功能③原理 二、下载安装①下载②安装 三、使用方法①文…

吴恩达机器学习笔记十六 如何debug一个学习算法 模型评估 模型选择和训练 交叉验证测试集

如果算法预测出的结果不太好,可以考虑以下几个方面: 获得更多的训练样本 采用更少的特征 尝试获取更多的特征 增加多项式特征 增大或减小 λ 模型评估(evaluate model) 例如房价预测,用五个数据训练出的模型能很好的拟合这几个数据&am…

Linux调试器--gdb的介绍以及使用

文章目录 1.前言 ✒️2.介绍gdb✒️3.Debug模式和Release模式的区别✒️4.如何使用gdb✒️1️⃣.在debug模式下编译2️⃣.进入调试3️⃣ .调试命令集合⭐️⭐️ 1.前言 ✒️ 🕗在我们之前的学习中已经学会了使用vim编译器编写c/c代码,但是对于一个程序员…

OpenCV 图像的几何变换

一、图像缩放 1.API cv2.resize(src, dsize, fx0,fy0,interpolation cv2.INTER_LINEAR) 参数: ①src :输入图像 ②dsize:绝对尺寸 ③fx,fy:相对尺寸 ④interpolation:插值方法 2.代码演示 import cv2 …

Python——读写属性

采用读写属性的目的就是把录入的数据控制在合理区间。 如:学生的年龄(age),学生的身高(height)... 方法一:利用实例方法来控制 class Student:def __init__(self,name"",age0):self.…

Linux:kubernetes(k8s)prestop事件的使用(10)

他的作用是在结束pod容器之后进行的操作 apiVersion: v1 # api文档版本 kind: Pod # 资源对象类型 metadata: # pod相关的元数据,用于描述pod的数据name: nginx-po # pod名称labels: # pod的标签type: app #这个是随便写的 自定义的标签version: 1.0.0 #这个…

PostgreSQL 安装部署

文章目录 一、PostgreSQL部署方式1.Yum方式部署2.RPM方式部署3.源码方式部署4.二进制方式部署5.Docker方式部署 二、PostgreSQL部署1.Yum方式部署1.1.部署数据库1.2.连接数据库 2.RPM方式部署2.1.部署数据库2.2.连接数据库 3.源码方式部署3.1.准备工作3.2.编译安装3.3.配置数据…

C语言 --- 指针(5)

目录 一.sizeof和strlen对比 1.sizeof 2.strlen 3.strlen 和sizeof的对比 二.数组和指针笔试题目详解 回顾:数组名的理解 1.一维数组 2.字符数组 代码1: 代码2: 代码3: 代码4: 代码5: 代码6&am…

SSM整合项目(使用Vue3 + Element-Plus创建项目基础页面)

1.配置Vue启动端口 1.修改vue.config.js const {defineConfig} require(vue/cli-service) module.exports defineConfig({transpileDependencies: true }) module.exports {devServer: {port: 9999 //启动端口} }2.启动 2.安装Element Plus 命令行输入 npm install eleme…

【leetcode热题】排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3: 输入…

骑行瓦恭村的记忆

昆富公路是一条蜿蜒的丝带,引领着校长骑行这群热爱骑行的骑友,穿越时光的隧道,直达心灵深处那个被岁月抚摸得斑斑点点的小村庄——瓦恭村。大普吉隧道如同时光的门扉,每一次穿越,都伴随着轰鸣的排气扇声音,…

新规正式发布 | 百度深度参编《生成式人工智能服务安全基本要求》

2024年2月29日,全国网络安全标准化技术委员会( TC260 )正式发布《生成式人工智能服务安全基本要求》(以下简称《基本要求》)。《基本要求》规定了生成式人工智能服务在安全方面的基本要求,包括语料安全、模…

HarmonyOS 关系型数据 整体测试 进行 初始化 增删查改 操作

好啊 前面的文章 HarmonyOS 数据持久化 关系型数据库之 初始化操作 HarmonyOS 数据持久化 关系型数据库之 增删改逻辑编写 HarmonyOS 数据持久化 关系型数据库之 查询逻辑编写 我们分别编写了 初始化数据库表 增删查改操作 的逻辑代码 那么 下面我们就来整体操作一下 然后 这…