core v1
This commit is contained in:
@@ -9,7 +9,9 @@ import (
|
||||
"time"
|
||||
|
||||
"server/internal/models"
|
||||
internalDb "server/internal/db"
|
||||
"server/internal/qldt"
|
||||
"server/internal/util"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
@@ -104,6 +106,15 @@ func (j *StudentsSyncJob) run(db *gorm.DB, client *qldt.Client, token string) {
|
||||
}
|
||||
}
|
||||
|
||||
avatarVal := ""
|
||||
if s.Avatar != nil {
|
||||
avatarVal = util.NormalizeAvatarURL(*s.Avatar)
|
||||
}
|
||||
var avatar *string
|
||||
if avatarVal != "" {
|
||||
avatar = &avatarVal
|
||||
}
|
||||
|
||||
st := models.Student{
|
||||
RkID: s.ID,
|
||||
StudentCode: s.StudentCode,
|
||||
@@ -114,6 +125,7 @@ func (j *StudentsSyncJob) run(db *gorm.DB, client *qldt.Client, token string) {
|
||||
Gender: s.Gender,
|
||||
Status: s.Status,
|
||||
Location: s.Location,
|
||||
Avatar: avatar,
|
||||
}
|
||||
if s.System != nil {
|
||||
sysID := s.System.ID
|
||||
@@ -135,6 +147,7 @@ func (j *StudentsSyncJob) run(db *gorm.DB, client *qldt.Client, token string) {
|
||||
"gender",
|
||||
"status",
|
||||
"location",
|
||||
"avatar",
|
||||
"system_id",
|
||||
"system_name",
|
||||
"updated_at",
|
||||
@@ -302,29 +315,35 @@ func (j *ClassesSyncJob) run(db *gorm.DB, client *qldt.Client, token string) {
|
||||
}
|
||||
}
|
||||
|
||||
// Lưu liên kết Course
|
||||
if err := tx.Where("class_rk_id = ?", cl.ID).Delete(&models.ClassCourseLink{}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
j.setError("Failed to clear old class course links: " + err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var courseLinks []models.ClassCourseLink
|
||||
for ord, co := range cl.Courses {
|
||||
if co.ID == 0 {
|
||||
continue
|
||||
|
||||
// Lưu danh sách môn học của lớp (từ API lớp + portal courses)
|
||||
courseDTOs := make([]internalDb.ClassCourseDTO, 0, len(cl.Courses))
|
||||
for _, co := range cl.Courses {
|
||||
if co.ID > 0 {
|
||||
courseDTOs = append(courseDTOs, internalDb.ClassCourseDTO{
|
||||
ID: co.ID,
|
||||
Name: co.Name,
|
||||
})
|
||||
}
|
||||
courseLinks = append(courseLinks, models.ClassCourseLink{
|
||||
ClassRkID: cl.ID,
|
||||
CourseRkID: co.ID,
|
||||
CourseName: co.Name,
|
||||
CourseOrder: ord,
|
||||
})
|
||||
}
|
||||
if len(courseLinks) > 0 {
|
||||
if err := tx.Create(&courseLinks).Error; err != nil {
|
||||
if portalRes, err := client.GetClassCourses(ctx, token, cl.ID); err == nil && len(portalRes.Data) > 0 {
|
||||
portalDTOs := make([]internalDb.ClassCourseDTO, 0, len(portalRes.Data))
|
||||
for _, co := range portalRes.Data {
|
||||
if co.ID > 0 {
|
||||
portalDTOs = append(portalDTOs, internalDb.ClassCourseDTO{
|
||||
ID: co.ID,
|
||||
Name: co.Name,
|
||||
CourseCode: co.CourseCode,
|
||||
})
|
||||
}
|
||||
}
|
||||
courseDTOs = internalDb.MergeClassCourses(courseDTOs, portalDTOs)
|
||||
}
|
||||
if len(courseDTOs) > 0 {
|
||||
if err := internalDb.UpsertClassCourses(tx, cl.ID, courseDTOs); err != nil {
|
||||
tx.Rollback()
|
||||
j.setError("Failed to insert class course links: " + err.Error())
|
||||
j.setError("Failed to save class courses: " + err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -354,6 +373,7 @@ func (j *ClassesSyncJob) run(db *gorm.DB, client *qldt.Client, token string) {
|
||||
"gender",
|
||||
"status",
|
||||
"location",
|
||||
"avatar",
|
||||
"system_id",
|
||||
"system_name",
|
||||
"updated_at",
|
||||
@@ -521,6 +541,11 @@ func extractStudentsFromDashboard(payloadJSON []byte) ([]models.Student, error)
|
||||
status, _ := studentObj["status"].(string)
|
||||
location, _ := studentObj["location"].(string)
|
||||
|
||||
var avatar *string
|
||||
if av := util.PickAvatarFromMap(studentObj); av != "" {
|
||||
avatar = &av
|
||||
}
|
||||
|
||||
student := models.Student{
|
||||
RkID: rkID,
|
||||
StudentCode: stCode,
|
||||
@@ -531,6 +556,7 @@ func extractStudentsFromDashboard(payloadJSON []byte) ([]models.Student, error)
|
||||
Gender: gender,
|
||||
Status: &status,
|
||||
Location: &location,
|
||||
Avatar: avatar,
|
||||
}
|
||||
|
||||
if sysVal, ok := studentObj["system"].(map[string]interface{}); ok && sysVal != nil {
|
||||
|
||||
Reference in New Issue
Block a user