You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.9 KiB
Java
66 lines
2.9 KiB
Java
package com.sztzjy.linkCommerce.service.impl;
|
|
|
|
import com.sztzjy.linkCommerce.config.exception.handler.ServiceException;
|
|
import com.sztzjy.linkCommerce.config.security.JwtUser;
|
|
import com.sztzjy.linkCommerce.entity.SchoolClass;
|
|
import com.sztzjy.linkCommerce.entity.TeachingClassStudent;
|
|
import com.sztzjy.linkCommerce.mapper.SchoolClassMapper;
|
|
import com.sztzjy.linkCommerce.mapper.TeachingClassStudentMapper;
|
|
import com.sztzjy.linkCommerce.service.StudentTeachingClassResolver;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@Service
|
|
public class StudentTeachingClassResolverImpl implements StudentTeachingClassResolver {
|
|
@Autowired
|
|
public SchoolClassMapper schoolClassMapper;
|
|
@Autowired
|
|
public TeachingClassStudentMapper teachingClassStudentMapper;
|
|
|
|
@Override
|
|
public String resolveRequired(JwtUser user) {
|
|
requireStudent(user);
|
|
String teachingClassId;
|
|
if (user.isDemoMode()) {
|
|
teachingClassId = StringUtils.trimToNull(user.getDemoTeachingClassId());
|
|
if (teachingClassId == null) {
|
|
throw new ServiceException(HttpStatus.FORBIDDEN, "Demo teaching class is required");
|
|
}
|
|
} else {
|
|
TeachingClassStudent membership = teachingClassStudentMapper.selectActiveByStudentUserId(user.getUserId());
|
|
teachingClassId = membership == null ? null : StringUtils.trimToNull(membership.getTeachingClassId());
|
|
if (teachingClassId == null) {
|
|
throw new ServiceException(HttpStatus.BAD_REQUEST, "Student has no active teaching class");
|
|
}
|
|
}
|
|
validateTeachingClass(user, teachingClassId);
|
|
return teachingClassId;
|
|
}
|
|
|
|
@Override
|
|
public String resolveRequested(JwtUser user, String requestedTeachingClassId) {
|
|
String resolved = resolveRequired(user);
|
|
String requested = StringUtils.trimToNull(requestedTeachingClassId);
|
|
if (requested != null && !StringUtils.equals(resolved, requested)) {
|
|
throw new ServiceException(HttpStatus.FORBIDDEN, "Teaching class does not match current student context");
|
|
}
|
|
return resolved;
|
|
}
|
|
|
|
private void validateTeachingClass(JwtUser user, String teachingClassId) {
|
|
SchoolClass schoolClass = schoolClassMapper.selectByPrimaryKey(teachingClassId);
|
|
if (schoolClass == null || !"TEACHING".equals(schoolClass.getClassType())
|
|
|| !StringUtils.equals(user.getSchoolId(), schoolClass.getSchoolId())) {
|
|
throw new ServiceException(HttpStatus.FORBIDDEN, "Teaching class is unavailable");
|
|
}
|
|
}
|
|
|
|
private void requireStudent(JwtUser user) {
|
|
if (user == null || user.getRoleId() != 4 || StringUtils.isBlank(user.getUserId())) {
|
|
throw new ServiceException(HttpStatus.FORBIDDEN, "Student only");
|
|
}
|
|
}
|
|
}
|