管理员库接口

master
Eterlaze 8 months ago
parent 04d7eb6aed
commit f9ac9c2dc9

@ -0,0 +1,36 @@
package com.example.api.repository;
import com.example.api.model.entity.Admin; // 导入Admin实体类
import org.springframework.data.jpa.repository.JpaRepository; // 继承JPA仓库接口
import org.springframework.stereotype.Repository; // 标识这是一个Repository组件
/**
*
*/
// 使用@Repository注解标识这是一个Spring组件通常用于数据访问层
@Repository
public interface AdminRepository extends JpaRepository<Admin, String> {
/**
*
* @param email
* @param password
* @return null
*/
Admin findAdminByEmailAndPassword(String email, String password);
/**
*
* @param email
* @return null
*/
Admin findAdminByEmail(String email);
/**
*
* @param roles
* @return truefalse
*/
boolean existsAdminByRoles(String roles);
}

@ -0,0 +1,72 @@
package com.example.api.service;
import com.example.api.model.dto.LoginDto; // 导入LoginDto数据传输对象封装登录信息
import com.example.api.model.entity.Admin; // 导入Admin实体类代表管理员信息
import java.util.List; // 导入List类用于处理列表数据
/**
*
*/
public interface AdminService {
/**
*
* @param admin
* @return ID
* @throws Exception
*/
Admin save(Admin admin) throws Exception;
/**
* ID
* @param id ID
* @return null
*/
Admin findById(String id);
/**
*
* @param email
* @return truefalse
* @throws Exception
*/
boolean sendEmail(String email) throws Exception;
/**
*
* @param dto
* @return
* @throws Exception
*/
Admin loginByPassword(LoginDto dto) throws Exception;
/**
*
* @param dto
* @return
* @throws Exception
*/
Admin loginByEmail(LoginDto dto) throws Exception;
/**
*
* @return
*/
List<Admin> findAll();
/**
* JWT
* @param admin
* @param exp
* @return JWT
*/
String createToken(Admin admin, long exp);
/**
* ID
* @param id ID
*/
void delete(String id);
}

@ -0,0 +1,144 @@
package com.example.api.service.impl;
import com.example.api.exception.AccountAndPasswordError; // 导入自定义异常类,用于处理账号和密码错误的情况
import com.example.api.model.dto.LoginDto; // 导入登录数据传输对象,用于封装登录请求的数据
import com.example.api.model.entity.Admin; // 导入Admin实体类代表系统中的管理员账户
import com.example.api.model.entity.LoginLog; // 导入登录日志实体类,用于记录管理员登录日志
import com.example.api.repository.AdminRepository; // 导入AdminRepository接口用于访问管理员数据
import com.example.api.repository.LoginLogRepository; // 导入LoginLogRepository接口用于访问登录日志数据
import com.example.api.service.AdminService; // 导入AdminService接口定义管理员服务
import com.example.api.service.EmailService; // 导入EmailService接口用于发送邮件服务
import com.example.api.utils.DataTimeUtil; // 导入日期时间工具类,用于处理日期时间
import com.example.api.utils.JwtTokenUtil; // 导入JWT工具类用于生成和解析JWT令牌
import org.springframework.stereotype.Service; // 标识这是一个Service组件Spring容器会进行管理
import javax.annotation.Resource; // 注解用于注入Spring管理的Bean
import java.util.Date; // 导入Date类用于处理日期
import java.util.List; // 导入List类用于处理列表数据
/**
* Admin
*/
@Service
public class AdminServiceImpl implements AdminService {
@Resource
private AdminRepository adminRepository; // 注入Admin仓库用于访问管理员数据
@Resource
private EmailService emailService; // 注入邮件服务,用于发送邮件
/**
*
* @param admin
* @return
* @throws Exception
*/
@Override
public Admin save(Admin admin) throws Exception {
// 校验邮箱长度和密码长度,如果不符合要求则抛出异常
if (admin.getEmail().length() < 8 || admin.getPassword().length() < 5) throw new Exception("请求参数异常");
// 设置创建时间
admin.setCreateAt(DataTimeUtil.getNowTimeString());
// 保存管理员信息
return adminRepository.save(admin);
}
/**
* ID
* @param id ID
* @return null
*/
@Override
public Admin findById(String id) {
// 根据ID查询管理员信息如果不存在则返回null
return adminRepository.findById(id).orElse(null);
}
/**
*
* @param email
* @return
* @throws Exception
*/
@Override
public boolean sendEmail(String email) throws Exception {
// 根据邮箱查询管理员信息
Admin admin = adminRepository.findAdminByEmail(email);
// 如果管理员信息不存在,则抛出异常
if (admin == null) throw new Exception("不存在的邮箱账户");
// 发送验证邮件
return emailService.sendVerificationCode(email);
}
/**
*
* @param dto
* @return
* @throws Exception
*/
@Override
public Admin loginByPassword(LoginDto dto) throws Exception {
// 根据邮箱和密码查询管理员信息
Admin one = adminRepository.findAdminByEmailAndPassword(dto.getEmail(), dto.getPassword());
// 如果管理员信息不存在,则抛出异常
if (one == null) {
throw new Exception("邮箱或密码错误");
}
// 返回管理员信息
return one;
}
/**
*
* @param dto
* @return
* @throws Exception
*/
@Override
public Admin loginByEmail(LoginDto dto) throws Exception {
// 校验邮箱验证码
boolean status = emailService.checkVerificationCode(dto.getEmail(), dto.getCode());
// 如果验证码错误,则抛出异常
if (!status) throw new Exception("验证码错误");
// 根据邮箱查询管理员信息
return adminRepository.findAdminByEmail(dto.getEmail());
}
/**
*
* @return
*/
@Override
public List<Admin> findAll() {
// 查询所有管理员信息
return adminRepository.findAll();
}
/**
* JWT Token
* @param admin
* @param exp Token
* @return JWT Token
*/
@Override
public String createToken(Admin admin, long exp) {
// 从管理员信息中获取角色字符串
String rolesString = admin.getRoles();
// 将角色字符串分割成数组
String[] roles = rolesString != null ? rolesString.split(";") : null;
// 创建JWT Token
return JwtTokenUtil.createToken(admin.getEmail(), roles, exp);
}
/**
*
* @param id ID
*/
@Override
public void delete(String id) {
// 根据ID删除管理员信息
adminRepository.deleteById(id);
}
}
Loading…
Cancel
Save