我和群众站一队-alpha冲刺第5日

我和群众站一队 2024-11-06 22:13:48

冲刺日记五:

这个作业属于哪个课程https://bbs.csdn.net/forums/2401_CS_SE_FZU
这个作业要求在哪里https://bbs.csdn.net/topics/619397949
这个作业的目标CodeArt团队实战总结
其他参考文献CSDN,博客园

目录

  • 冲刺日记五:
  • 一、项目进展
  • 二、存在的问题/遇到的困难及接下来的安排
  • 三、站立式会议照片
  • 四、今日完成度相关照片
  • 五、心得体会

一、项目进展

222200315张俊腾
进展一:完成了将Token验证从Service层迁移到拦截器层的工作。

 public Response<Void> acceptHelpRequest(String helpRequestID, Long userId) {
    // 查找求助信息
    Optional<HelpRequest> optionalHelp = helpRequestRepository.findById(Long.parseLong(helpRequestID));
    if (!optionalHelp.isPresent()) {
        return new Response<>(404, "求助信息不存在", null);
    }

    HelpRequest helpRequest = optionalHelp.get();

    // 检查求助类型
    Integer type = helpRequest.getType(); // 1: 一对一, 2: 一对多

    if (type == 1) { // 一对一
        boolean alreadyAccepted = rescueInfoRepository.existsByHelpId(helpRequest.getId());
        if (alreadyAccepted) {
            return new Response<>(400, "该求助已被其他用户接取", null);
        }
    }

    // 创建新的RescueInfo
    RescueInfo rescueInfo = new RescueInfo();
    rescueInfo.setUid(userId);
    rescueInfo.setHelpId(helpRequest.getId());
    rescueInfo.setStatus(0); // 0=进行中
    rescueInfoRepository.save(rescueInfo);

    return new Response<>(200, "success", null);
}

222200309孙阳
进展一:完成“获取用户消息接口”,新增了 MessageController,dto_Message,MessageRespository,MessageService文件

@Service
public class MessageService {
    @Autowired
    private MessageRepository messageRepository;

    @Autowired
    private UserRepository userRepository;


    public Response<List<MessageDetail>> GetUserMessage(Long uid, String token) {

        // 检查令牌
        Claims claims;
        try {
            claims = JwtUtil.extractClaims(token);
        } catch (MalformedJwtException e) {
            return new Response<>(400, "无效的令牌格式", null);
        } catch (ExpiredJwtException e) {
            return new Response<>(401, "令牌已过期", null);
        } catch (IllegalArgumentException e) {
            return new Response<>(400, "令牌不能为空", null);
        } catch (JwtException e) {
            return new Response<>(401, "无效的令牌", null);
        } catch (Exception e) {
            return new Response<>(500, "服务器内部错误", null);
        }

        Optional<User> optUser=userRepository.findById(uid);
        if(optUser.isEmpty()){
            return new Response<>(401, "用户不存在", null);
        }
        else {
            return new Response<>(200,"success", messageRepository.findByToUidOrderByCreatedAtDesc(uid).stream()
                    .map( message-> {
                        return new MessageDetail(
                                message.getId(),
                                message.getToUid(),
                                message.getTitle(),
                                message.getContent(),
                                message.getCreatedAt(),
                                message.getUpdatedAt(),
                                message.getDeletedAt()
                        );
                    })
                    .collect(Collectors.toList()));
        }

    }
}

222200304卢君豪
进展一:“发起求助”service的实现

public Response<Null> initiateHelpRequest(InitiateHelpRequest initiateHelpRequest, Long uid) {
            if (!userRepository.existsById(uid)) {
                return new Response<>(401, "用户不存在", null);
            }
            if (initiateHelpRequest.getLocation().isEmpty()) {
                return new Response<>(401, "位置不能为空", null);
            }
            if (initiateHelpRequest.getType() != 1 && initiateHelpRequest.getType() != 2) {
                return new Response<>(401, "类型无效", null);
            }
            if (initiateHelpRequest.getPhoneNumber().isEmpty()) {
                return new Response<>(401, "联系方式不能为空", null);
            }
            if (initiateHelpRequest.getAssistanceType() < 1 || initiateHelpRequest.getAssistanceType() > 4) {
                return new Response<>(401, "援助类型无效", null);
            }
            if (initiateHelpRequest.getIntroduction().isEmpty()) {
                return new Response<>(401, "描述不能为空", null);
            }

            initiateHelpRequest.setUid(uid);
            HelpRequest helpRequest = convertHelpRequest(initiateHelpRequest);
            helpRequestRepository.save(helpRequest);
            return new Response<>(200, "success", null);
        }

        private HelpRequest convertHelpRequest(InitiateHelpRequest initiateHelpRequest) {
            HelpRequest helpRequest = new HelpRequest();
            helpRequest.setUid(initiateHelpRequest.getUid());
            helpRequest.setLocation(initiateHelpRequest.getLocation());
            helpRequest.setType(initiateHelpRequest.getType());
            helpRequest.setPhoneNumber(initiateHelpRequest.getPhoneNumber());
            helpRequest.setDetailedAddress(initiateHelpRequest.getDetailedAddress());
            helpRequest.setRoadCondition(initiateHelpRequest.getRoadCondition());
            helpRequest.setWeatherCondition(initiateHelpRequest.getWeatherCondition());
            helpRequest.setUtilitiesInfo(initiateHelpRequest.getUtilitiesInfo());
            helpRequest.setAssistanceType(initiateHelpRequest.getAssistanceType());
            helpRequest.setSuppliesNeeded(initiateHelpRequest.getSuppliesNeeded());
            helpRequest.setIntroduction(initiateHelpRequest.getIntroduction());
            return helpRequest;
        }

进展二:token的修改

@PostMapping
        public Response<Null> initiateHelpRequest(@ModelAttribute InitiateHelpRequest helpRequest) {
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

            if (authentication == null || !authentication.isAuthenticated()) {
                return new Response<>(403, "未认证的用户没有权限执行此操作", null);
            }

            Object principal = authentication.getPrincipal();

            if (principal instanceof CustomUserDetails customUserDetails) {
                Long uid = customUserDetails.getId();
                return helpRequestService.initiateHelpRequest(helpRequest, uid);
            }
            return new Response<>(403, "当前用户没有权限执行此操作", null);
        }

222200310李怡涵
进展一:token的更新

 // 从SecurityContextHolder获取当前认证信息
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        // 检查当前用户是否已认证
        if (authentication == null || !authentication.isAuthenticated()) {
            return new Response<>(403, "未认证的用户没有权限执行此操作", null);
        }
        // 获取当前用户的UserDetails
        Object principal = authentication.getPrincipal();
        CustomUserDetails customUserDetails = (CustomUserDetails) principal;

进展二:entity新表的建立

package com.bafang.entity.entity_live;

import jakarta.persistence.*;
import org.hibernate.annotations.SQLRestriction;

import java.time.LocalDateTime;

@Entity
@Table(name = "user_live_info_vote")
@SQLRestriction("deleted_at IS NULL")
public class UserLiveInfoVote {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "uid", nullable = false)
    private Long uid;

    @Column(name = "live_info_id", nullable = false)
    private Long liveInfoId;

    @Column(name = "vote_type", nullable = false)
    private Integer voteType;

    @Column(name = "created_at")
    private LocalDateTime createdAt;

    @Column(name = "updated_at")
    private LocalDateTime updatedAt;

    @Column(name = "deleted_at")
    private LocalDateTime deletedAt;

    @PrePersist
    protected void onCreate() {
        setCreatedAt(LocalDateTime.now());
        setUpdatedAt(LocalDateTime.now());
    }

    @PreUpdate
    protected void onUpdate() {
        setUpdatedAt(LocalDateTime.now());
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getUid() {
        return uid;
    }

    public void setUid(Long uid) {
        this.uid = uid;
    }

    public Long getLiveInfoId() {
        return liveInfoId;
    }

    public void setLiveInfoId(Long liveInfoId) {
        this.liveInfoId = liveInfoId;
    }

    public Integer getVoteType() {
        return voteType;
    }

    public void setVoteType(Integer voteType) {
        this.voteType = voteType;
    }

    public LocalDateTime getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(LocalDateTime createdAt) {
        this.createdAt = createdAt;
    }

    public LocalDateTime getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(LocalDateTime updatedAt) {
        this.updatedAt = updatedAt;
    }

    public LocalDateTime getDeletedAt() {
        return deletedAt;
    }

    public void setDeletedAt(LocalDateTime deletedAt) {
        this.deletedAt = deletedAt;
    }
}

222200311李梓玄
进展一:修复当拖拽地图时错误的重新定位、 优化上传实况界面

img

进展二:实现发起求助界面

img

222200328夏振
进展一:修复拦截器未验证管理员权限bug
222200401丁昌彪
进展一:完成实名认证和获取求助记录功能
222200312杨年申
进展一:完成UserController.realNameAuthentication及其Request搭建

@GetMapping
            public ResultResponse<UserDetail> getUserInfo(
                    @RequestParam("uid") Long uid,
                    @RequestHeader("Authorization") String token
            ) {
                return userService.GetUserInfo(uid, token);
            }
public class RealNameAuthenticationRequest {
            private String id_number;
            private String real_Name;

            // Getter 和 Setter
            public String getId_number() {
                return id_number;
            }
            public void setId_number(String Id_number) {
                this.id_number = Id_number;
            }
            public String getReal_Name() {
                return real_Name;
            }
            public void setReal_Name(String Real_Name) {
                this.real_Name = Real_Name;
            }
        }

进展二:完善realNameAuthentication的Service和Repository

public Response Authenticate(RealNameAuthenticationRequest authenticationRequest, String token) {
            // 检查令牌是否过期
            if (JwtUtil.isTokenExpired(token)) {
                return new Response(401, "令牌已过期");
            }

            Claims claims;
            try {
                claims = JwtUtil.extractClaims(token);
            } catch (Exception e) {
                return new Response(401, "无效的令牌");
            }

            long userId;
            try {
                userId = Long.parseLong(claims.getSubject()); // 提取用户ID
            } catch (NumberFormatException e) {
                return new Response(400, "无效的userID");
            }

            // 验证身份证号
            String idNumber = authenticationRequest.getId_number();
            if (!isValidIdCard(idNumber)) {
                return new Response(400, "无效的身份证号");
            }

            //更新用户实名
            Optional<User> optionalUser = userRepository.findById(userId);
            if (optionalUser.isPresent()) {
                User User = optionalUser.get();
                User.setRealName(authenticationRequest.getReal_Name());
                User.setIdNumber(authenticationRequest.getId_number());
                User.setIsRealNameAuthentication(true);
                userRepository.save(User);
                return new Response(200, "success");
            }
            else
            {
                return new Response(500, "更新用户信息失败");
            }
        }
@Query("SELECT u.role FROM User u WHERE u.id = :userId")
            Integer findRoleById(Long userId);

222200230梁蕴潆
进展一:编写冲刺日记
进展二:更新了主页部分组件的代码

<template>
  <div class="home-container">
    <!-- 导航组件 -->
    <Navigation />

    <!-- 主内容区域 -->
    <main>
      <section class="welcome-area">
        <h1>欢迎来到灾难互助平台</h1>
        <p>我们在这里帮助受灾地区的人们重建家园。</p>
      </section>

      <section class="features">
        <div class="feature-item">
          <h2>求助信息</h2>
          <p>查看最新的求助信息,并提供援助。</p>
          <router-link to="/help" class="btn">查看更多</router-link>
        </div>
        <div class="feature-item">
          <h2>捐赠信息</h2>
          <p>了解捐赠详情,并参与捐赠。</p>
          <router-link to="/donate" class="btn">查看更多</router-link>
        </div>
        <div class="feature-item">
          <h2>志愿者注册</h2>
          <p>加入我们的志愿者团队,为受灾地区提供帮助。</p>
          <router-link to="/volunteer" class="btn">注册</router-link>
        </div>
      </section>
    </main>

二、存在的问题/遇到的困难及接下来的安排

成员存在的问题/遇到的困难接下来的安排
222200315张俊腾关于拦截器的概念和token的验证逻辑完成接口的bug修复。
222200309孙阳用户消息如何在后台自动更新打算测试“获取用户消息接口,”开始编写“更新用户消息”的接口代码
222200304卢君豪存在的问题/遇到的困难 - 问题、困难1,更新了token的使用,但还不是很懂 - 解答,先照着别人的代码写再说设计“获取附近求助信息”的dto、controller
222200310李怡涵修复已知Bug,完成用户点赞/点踩接口
222200311李梓玄继续上传实况信息、发起求助接口对接 - 重新审查 后端代码,做一个小总结
222200328夏振搞不懂啊,现学jwt权限验证接下来还是把我剩下没完成的功能设计实现,并总结今天完成的内容
222200401丁昌彪问题:后端的json字段和文档的不同 解决办法:自己查看json字段信息,并提醒后端的伙伴更新文档完成我的实况功能
222200312杨年申问题、困难1- - 用户提交的实名认证信息(如姓名、身份证号码等)需要进行验证,确保格式和内容的正确性。- 解答 请求参数进行验证,确保各项信息符合预期格式,比如使用正则表达式验证身份证号码的格式。- 问题、困难2 - 在进行实名认证时,确保用户已登录并验证其身份。- 解答 - 在 Service 层中,添加权限检查逻辑,验证请求者是否有权限访问目标用户的信息。例如,可以通过 JWT 令牌来验证用户身份。安排实现一个接口getUserAuthentication
222200230梁蕴潆可能需要考虑实际的设计和需求进一步调整样式和内容。总结今日的工作,初步实现下一项任务。

三、站立式会议照片

img

四、今日完成度相关照片

成员相关图片
222200315张俊腾

在这里插入图片描述

222200309孙阳

img

222200304卢君豪

img

222200310李怡涵

img

222200311李梓玄

img

222200328夏振

img

222200401丁昌彪

img

222200312杨年申

img

222200230梁蕴潆

img

五、心得体会

成员心得体会
222200315张俊腾- 在开发过程中,正确设置 Content-Type 对于API的正常运行至关重要,避免了许多不必要的错误。- 要检查url有没有拼写错误
222200309孙阳代码编写要专心,否则只会永远debug
222200304卢君豪非常好的学习,使我对新token一知半解
222200310李怡涵
222200311李梓玄还是写静态界面轻松
222200328夏振感谢项目使我获得提升,谢谢
222200401丁昌彪勤能补拙。编程还是得多实战。
222200312杨年申身份验证的必要性:确保用户身份合法性不仅能保护用户隐私,也能防止恶意操作。使用安全的身份验证机制(如 JWT)来确认用户身份至关重要。
222200230梁蕴潆参与项目让我获得提升,学到很多新知识。
...全文
133 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

113

社区成员

发帖
与我相关
我的任务
社区描述
202401_CS_SE_FZU
软件工程 高校
社区管理员
  • FZU_SE_TeacherL
  • 助教_林日臻
  • 防震水泥
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧