首页 > 其他分享 >个人博客-给推荐文章添加排序字段

个人博客-给推荐文章添加排序字段

时间:2023-06-25 18:25:22浏览次数:69  
标签:myDbContext return int 博客 id 添加 排序 public

个人博客-给推荐文章添加排序字段

前言

前篇文章优化了推荐文章的加载,但是呢,还是不太满意,之前是按照文章的发布日期去排序的,既然是推荐文章,还是得用一个字段去专门管理顺序。

设计思路:

给推荐文章表添加一个排序字段,然后写一个修改方法即可。

数据库字段

这里的数据类型以sqlite3为例。

字段名 类型 解释
Id INTEGER 主键
PostId TEXT 文章外键,对应文章主键id
SortOrder INTEGER 排序字段

实体类

    public class FeaturedPost
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string PostId { get; set; }
        public int SortOrder { get; set; } 
        public Post Post { get; set; }
    }

功能实现

Service层

老套路,添加接口

public interface IFPostService{
	Task<bool> UpdateSortOrderAsync(int featuredPostId, int newSortOrder);
}

实现这个接口

public class FPostService : IFPostService
{
    private readonly MyDbContext _myDbContext;
    public FPostService(MyDbContext myDbContext)
    {
        _myDbContext = myDbContext;
    }
        public async Task<bool> UpdateSortOrderAsync(int featuredPostId, int newSortOrder)
    {
        var fPost = await _myDbContext.featuredPosts.FindAsync(featuredPostId);
        if (fPost != null)
        {
            fPost.SortOrder = newSortOrder;
            await _myDbContext.SaveChangesAsync();
            return true;
        }
        return false;
    }
}

逻辑很简单,传入推荐文章的id,然后再传入新的排序字段,比如传入1就是排第一个。然后根据id去查询推荐文章,如果存在则修改排序字段,否则返回false。这里就简单的返回了一下成功和失败,如果希望更详细,可以自行琢磨。

注入服务

别忘记注入服务了

builder.Services.AddTransient<IFPostService, FPostService>();

Controller层

/// <summary>
/// 推荐博客
/// </summary>
[Authorize]  //这里指定该控制器下所有方法都需要token校验
[ApiController]
[Route("Api/[controller]")]
public class FeaturedPostController : ControllerBase{
    private readonly IFPostService _fpostService;
    public FeaturedPostController(IFPostService fpostService)
    {
        _fpostService = fpostService;
    }
    [HttpPut("{id:int}/{newSortOrder:int}")]
    public async Task<ApiResponse> UpdateSort(int id, int newSortOrder)
    {
        try
        {
            var result = await _fpostService.UpdateSortOrderAsync(id, newSortOrder);
            if (result)
                return ApiResponse.Ok("修改排序成功!");
            return ApiResponse.Error("修改排序失败");
        }
        catch (Exception ex)
        {
            return ApiResponse.Error("发生错误:" + ex.Message);
        }
    }
}

ApiResponse是大佬封装的返回类型,具体可以查看https://www.cnblogs.com/deali/p/16995384.html,这里就不做多的解释了,用自带的返回值也是可以的。

接口测试

数据库数据展示

image

失败

修改不存在的推荐文章,可以正常提示错误信息

image

成功

image

修改查询接口

让查询接口根据排序字段升序排列OrderBy(o => o.SortOrder)

用户端

public async Task<IPagedList<Post>> GetFeaturedPostsAsync(QueryParameters param)
{
    var posts =await _myDbContext.featuredPosts
        .OrderBy(o => o.SortOrder)
        .Include(fp => fp.Post)
        .ThenInclude(p => p.Categories)
        .Include(fp => fp.Post)
        .ThenInclude(p => p.Comments)
        .Select(fp => fp.Post)
        .ToPagedListAsync(param.Page, param.PageSize);
    return posts;
}

管理端

public async Task<List<FeaturedPost>> GetListAsync()
{
     return await _myDbContext.featuredPosts.Include(a => a.Post.Categories).OrderBy(o => o.SortOrder).ToListAsync();
}

后台管理系统

给请求的ts文件添加一个axios请求

import axios from "../axios"

// 修改排序字段
export const updateSort = (Id,newId) => {
  return axios({
    url: `FeaturedPost/${Id}/${newId}`,
    method: 'put'
  })
}

Vue界面修改

这里就展示部分代码了,一些简单的Element plus的应用而已

<el-table-column prop="sortOrder" label="排序" width="300" :show-overflow-tooltip="true">
    <template #default="scope">
<el-input-number
                 v-model="tableData[scope.$index].sortOrder"
                 :disabled="Show"
                 :min="1"
                 :max="999"
                 controls-position="right"
                 size="large"
                 @change="handleChange(scope.$index,scope.row)"
                 />
    </template>
</el-table-column>
const Show = ref(false)

const handleChange = async (index,item) => {
  console.log(index+" "+item.id + " " + item.sortOrder)
  Show.value = true
  try {
    var res = (await updateSort(item.id,item.sortOrder))
    if(res.statusCode === 200){
      ElMessage.success(`${res.message}`)
    }else{
      ElMessage.error(`${res.message}`)
    }
  } catch (error) {
    if (error.response && error.response.data && error.response.data.message) {
      ElMessage.error(`${error.response.data.message}`);
    } else {
      ElMessage.error("发生错误,请重试");
    }
  } finally {
    Show.value = false;
  }
}

可以在finally加入重新加载数据,但是我觉得没什么必要,毕竟还是排序修改。

界面效果展示

image

image

修改了id为9的排序字段,其实在请求还没完成的时候,这个数字选择框是不能第二次修改的,关键代码:disabled="Show",修改完成才能进行二次修改。

完工

最近文章发布有点频繁,是时候断更一会儿了

标签:myDbContext,return,int,博客,id,添加,排序,public
From: https://www.cnblogs.com/ZYPLJ/p/17499490.html

相关文章

  • 博客园上传markdown文件
    博客园上传markdown文件......
  • 修改博客园代码块高亮主题
    博客园(默认编辑器设置为Markdowm)是使用heightlight.js进行代码块高亮的。因此可以通过下载heightlight.js官网的主题css修改博客园中的代码块高亮颜色。修改方法:进入heightlight.js官网,点击demo页面预览,查看主题效果在下载页面选择需要的语言并下载打开下载......
  • php 二维数组排序
    主要通过 array_multisort函数来进行排序<?php//原数组$arr=[["name"=>"小明","age"=>18],["name"=>"小红","age"=>7],["name"=>"小刚","age"=>52],[&......
  • 博客园美化教程大集合
    个人博客转移至:https://sunhwee.com,第一时间会先发在前者,有时间再更新至博客园。阅读目录:1. 前言2.定制自己的博客00.美化整体效果01.准备工作02.自定义个性化导航栏03.添加顶部博主信息04.添加顶部滚动公告05.为博客文章添加目录导航06.添加分......
  • 给自己的博客上添加个flash宠物插件
    前言最近在一些博主的博客上看到一些小宠物的挂件,很有趣,访客到了网站后可以耍耍小宠物,增加网站的趣味性,在功能强大的博客系统上看到有这样的小宠物挂件还是蛮有趣的。 正文下面就简单介绍下如何在博客园的博客中添加这些可爱的flash动物插件。1.由于这些可爱的flash小宠物......
  • 博客园下拉小猫特效
    博客园下拉小猫特效样式效果点击小猫之后会回到网页顶部使用方法1.在自己的博客园中找到管理->设置页面2.在页首HTML代码中插入<!--悬挂的喵--><scripttype="text/javascript"src="https://blog-static.cnblogs.com/files/fsh001/szgotop.js"></script><linkrel=......
  • 添加ASM磁盘报错ORA-02097和ORA-15014
    添加ASM磁盘报错ORA-02097和ORA-15014背景:   这是一套正在安装的11.2.0.1RAC,GridInfrastructure已经安装完成,ASMLib和磁盘分区均已完成,在通过asmca图形界面创建磁盘的时候没有发现成员盘。问题现象:问题分析:从报错信息上来看可以很明显的看出是因为参数asm_diskstring参......
  • 11gR2 硬件导致重新添加节点
    11gR2硬件导致重新添加节点作者:吴伟龙一、环境描述:        这是一套五年前部署的双节点单柜11gRAC,当时操作系统盘是一块164g的单盘,没有做RAID。    OS:RedHatEnterPrise5.5x86_x64    GI:OracleGridInfrastructure11.2.0.3x86_x64    DB:......
  • 博客 复制word里面带图文的文章,图片可以直接显示
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • 自定义博客园---返回顶部
    效果就是在页面最右下角的地方有一个小火箭队图标,如下图: 在博客园的设置中,在页首HTML代码中添加如下:<style>#back-top{position:fixed;bottom:10px;right:5px;z-index:99;}#back-topspan{width:50px;height:64px;dis......