Changes between Version 2 and Version 3 of appdevelopment


Ignore:
Timestamp:
02/04/26 21:54:59 (2 days ago)
Author:
231175
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • appdevelopment

    v2 v3  
    44
    55=== Креирање на курс ===
     6{{{
     7@Transactional
     8    @Override
     9    public CourseVersion createCourse(CourseDtoFull courseDtoFull) {
     10        Language language = courseDtoFull.getLanguage();
    611
     12        Course course = buildCourse(courseDtoFull, language);
     13
     14        CourseVersion oldCourseVersion = courseVersionRepository
     15                .findByActiveTrueAndCourse_Id(course.getId());
     16
     17        int newVersionNumber = 1;
     18        if (oldCourseVersion != null) {
     19            newVersionNumber = oldCourseVersion.getVersionNumber() + 1;
     20            oldCourseVersion.setActive(false);
     21            courseVersionRepository.save(oldCourseVersion);
     22        }
     23
     24        CourseVersion courseVersion = CourseVersion.builder()
     25                .versionNumber(newVersionNumber)
     26                .active(true)
     27                .creationDate(java.time.LocalDate.now())
     28                .course(course)
     29                .build();
     30
     31        List<CourseContent> contentList = courseDtoFull.getCourseContents().stream()
     32                .map(content -> courseContentService.buildCourseContent(content, courseVersion, language))
     33                .toList();
     34
     35        courseVersion.setCourseContents(contentList);
     36
     37        List<Tag> skillTags =  tagService.processRawTags(
     38                courseDtoFull.getSkillsGained(), TagType.SKILL, language
     39        );
     40        List<Tag> topicTags = tagService.processRawTags(
     41                courseDtoFull.getTopicsCovered(), TagType.TOPIC, language
     42        );
     43
     44        List<Tag> tagList = new ArrayList<>(skillTags);
     45        tagList.addAll(topicTags);
     46
     47        course.setTags(tagList);
     48
     49        return courseVersionRepository.save(courseVersion);
     50    }
     51
     52    private Course buildCourse(CourseDtoFull courseDtoFull, Language language) {
     53
     54        int durationMinutes = courseDtoFull.getCourseContents().stream()
     55                .flatMap(content -> content.getCourseLectures().stream())
     56                .mapToInt(CourseLectureDtoFull::getDurationMinutes)
     57                .sum();
     58
     59        Course course = Course.builder()
     60                .imageUrl(courseDtoFull.getImageUrl())
     61                .color(courseDtoFull.getColor())
     62                .difficulty(courseDtoFull.getDifficulty())
     63                .durationMinutes(durationMinutes)
     64                .price(courseDtoFull.getPrice())
     65                .build();
     66
     67        CourseTranslate courseTranslate = CourseTranslate.builder()
     68                .language(language)
     69                .titleShort(courseDtoFull.getTitleShort())
     70                .title(courseDtoFull.getTitle())
     71                .descriptionShort(courseDtoFull.getDescriptionShort())
     72                .description(courseDtoFull.getDescription())
     73                .descriptionLong(courseDtoFull.getDescriptionLong())
     74                .whatWillBeLearned(courseDtoFull.getWhatWillBeLearned())
     75                .course(course)
     76                .build();
     77
     78        course.setTranslations(List.of(courseTranslate));
     79        return course;
     80    }
     81}}}
     82
     83
     84=== Преведување на постоечки курс ===
     85{{{
     86@Transactional
     87    @Override
     88    public Course translateCourse(CourseTranslateReq courseTranslateReq) {
     89        validate.validateCourseExists(courseTranslateReq.getId());
     90        validate.validateCourseTranslation(courseTranslateReq.getId(), courseTranslateReq.getLanguage());
     91
     92        CourseVersion courseVersion = courseVersionRepository.findByActiveTrueAndCourse_Id(courseTranslateReq.getId());
     93        Course course = courseRepository.findById(courseTranslateReq.getId()).orElseThrow();
     94        addCourseTranslation(course, courseTranslateReq);
     95        translateContents(courseVersion, courseTranslateReq.getCourseContents(), courseTranslateReq.getLanguage());
     96
     97        tagService.processExistingTags(
     98                courseTranslateReq.getSkillsGained(), TagType.SKILL, courseTranslateReq.getLanguage()
     99        );
     100        tagService.processExistingTags(
     101                courseTranslateReq.getTopicsCovered(), TagType.TOPIC, courseTranslateReq.getLanguage()
     102        );
     103
     104        return courseRepository.save(course);
     105    }
     106
     107    private void addCourseTranslation(Course course, CourseTranslateReq dto) {
     108        CourseTranslate translation = CourseTranslate.builder()
     109                .language(dto.getLanguage())
     110                .titleShort(dto.getTitleShort())
     111                .title(dto.getTitle())
     112                .descriptionShort(dto.getDescriptionShort())
     113                .description(dto.getDescription())
     114                .descriptionLong(dto.getDescriptionLong())
     115                .whatWillBeLearned(dto.getWhatWillBeLearned())
     116                .course(course)
     117                .build();
     118
     119        course.getTranslations().add(translation);
     120    }
     121
     122    private void translateContents(CourseVersion courseVersion, List<CourseContentTranslateReq> contentDtos, Language language) {
     123        for (CourseContent content : courseVersion.getCourseContents()) {
     124            CourseContentTranslateReq contentDto = contentDtos.stream()
     125                    .filter(ct -> ct.getId().equals(content.getId()))
     126                    .findFirst()
     127                    .orElseThrow(() -> new RuntimeException(
     128                            "Missing translation DTO for CourseContent id=" + content.getId()
     129                    ));
     130
     131            addContentTranslation(content, contentDto, language);
     132        }
     133    }
     134
     135    private void addContentTranslation(CourseContent content, CourseContentTranslateReq contentDto, Language language) {
     136        CourseContentTranslate contentTranslate = CourseContentTranslate.builder()
     137                .title(contentDto.getTitle())
     138                .language(language)
     139                .courseContent(content)
     140                .build();
     141
     142        content.getTranslations().add(contentTranslate);
     143        translateLectures(content, contentDto.getCourseLectures(), language);
     144    }
     145
     146    private void translateLectures(CourseContent content, List<CourseLectureTranslateReq> lectureDtos, Language language) {
     147        for (CourseLecture lecture : content.getCourseLectures()) {
     148            CourseLectureTranslateReq lectureDto = lectureDtos.stream()
     149                    .filter(ld -> ld.getId().equals(lecture.getId()))
     150                    .findFirst()
     151                    .orElseThrow(() -> new RuntimeException(
     152                            "Missing translation DTO for CourseLecture id=" + lecture.getId()
     153                    ));
     154
     155            CourseLectureTranslate lectureTranslate = CourseLectureTranslate.builder()
     156                    .language(language)
     157                    .title(lectureDto.getTitle())
     158                    .description(lectureDto.getDescription())
     159                    .contentText(lectureDto.getContentText())
     160                    .courseLecture(lecture)
     161                    .build();
     162
     163            lecture.getTranslations().add(lectureTranslate);
     164        }
     165    }
     166}}}
    7167
    8168== Pooling ==