Skip to content
CAI
Software that uses CAICheck a score

Team-return/JOBIS-DSM-BE

50.5

Adequate · 21 September 2026

20k

lines of production code

Java

primary language

3

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a job recruitment and employment management platform designed to facilitate interactions between students, companies, and teachers. It supports the full lifecycle of job applications, including submission, status tracking, and rejection with attachments, while managing recruitment listings with detailed filtering and sorting. The platform also handles administrative workflows such as field trainee registration, employment contract management, and company profile maintenance. Additionally, it provides features for user authentication, interest-based job discovery, interview scheduling, and a notification system for real-time updates.

How it got here

2022–2023 — Application layer implementation and domain scaffolding

167 changes.

The project established its core application layer by implementing domain-driven design patterns, including use cases, SPIs, and DTOs across multiple domains such as recruitment, company, and student management. This period focused on building the foundational business logic and infrastructure adapters, migrating to Jakarta validation, and introducing features like authentication, file uploads, and bug reporting.

2024–2025 — Feature expansion and notification infrastructure

59 changes.

This period focused on implementing core domain features including banners, notices, interests, and winter internships, complete with their respective persistence layers and REST APIs. Concurrently, the system established a robust event-driven notification infrastructure using RabbitMQ to deliver targeted push alerts for recruitment, application, and notice updates. The work also included significant database schema migrations, enhanced error handling, and the introduction of integration testing via Testcontainers.

2026 — Interview domain and notification infrastructure

10 changes.

This period focused on implementing the core interview domain, including persistence entities, repositories, and REST APIs for managing interview schedules and document numbers. It also established asynchronous notification systems for interview alerts and email delivery, alongside a feature to track recently viewed companies using Redis.

Features

Add Feign clients for BizNo and Interest Company APIs

New Feign client interfaces and DTOs have been added to the infrastructure layer to integrate with external services. The BizNo client connects to the hardcoded URL https://bizno.net/api/fapi to retrieve business number details, while the Interest Company client uses the configurable ${interest.url} property to fetch recommended companies based on major and technology. Supporting DTOs (BusinessNumberResponse, InterestCompanyResponse, Item) and a configuration properties class (FeignProperty) are included to handle request/response mapping and access key management.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/api/client · high confidence

Add QueryBugReportsVO for QueryDSL projections

A new QueryBugReportsVO class has been introduced in the bug persistence repository to serve as a QueryDSL projection value object. It extends the existing BugReportsVO model and utilizes a @QueryProjection constructor to map query results (id, title, development area, and creation time) directly into the domain model, facilitating efficient data retrieval for bug reports.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bug/persistence/repository/vo · high confidence

Add Teacher entity with OneToOne relationship to User

A new TeacherEntity has been introduced in the persistence layer to represent the teacher domain model. It maps to the 'tbl\_teacher' table and establishes a OneToOne relationship with UserEntity, sharing the same primary key via @MapsId. The entity uses Jakarta Persistence annotations and excludes the user relationship from JSON serialization.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/teacher/persistence/entity · high confidence

Add TotalPageCountResponse DTO

A new response DTO, TotalPageCountResponse, has been introduced in the application layer to encapsulate total page count data. This class provides a structured way to return pagination metadata to clients, utilizing Lombok for boilerplate reduction.

jobis-application/src/main/java/team/retum/jobis/common/dto · high confidence

Add bug report persistence entities with attachment support

The infrastructure layer now includes JPA entities for the bug reporting domain: BugReportEntity maps to the tbl\_bug\_report table and stores the report title, content, development area, and the associated student, while BugAttachmentEntity serves as an embeddable value object for attachment URLs. These entities establish the data model required to persist bug reports and their associated file attachments.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bug/persistence/entity · high confidence

Add company authentication support with cached user details

The application now supports authentication for company users via a new \CompanyDetails\ implementation of Spring Security's \UserDetails\ and a corresponding \CompanyDetailsService\. This service loads company entities by ID and caches the resulting user details using the \COMPANY\_USER\ cache to improve performance during JWT authentication.

jobis-infrastructure/src/main/java/team/retum/jobis/global/security/auth/company · high confidence

Add notice persistence entities with attachment and view log support

The persistence layer for the Notice domain now includes three new JPA entities: NoticeEntity, which stores notice title and content and supports multiple attachments via a collection of NoticeAttachmentEntity (each holding a URL and an AttachmentType enum); NoticeAttachmentEntity, an embeddable value object for attachment metadata; and ViewLogEntity, which records when a specific StudentEntity views a NoticeEntity, automatically setting the viewedAt timestamp on creation. These entities establish the database schema (tbl\_notice, tbl\_notice\_attachment, tbl\_view\_log) required to store notices with files and track user engagement.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notice/persistence/entity · high confidence

Add notification persistence repositories

Introduced JPA repository interfaces for the notification domain to support data access for notifications and topic subscriptions. The new NotificationJpaRepository provides basic CRUD operations for notification entities, while TopicSubscriptionJpaRepository enables querying topic subscriptions by device token and retrieving subscribed topics, supporting the underlying notification delivery and subscription management logic.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notification/persistence/repository · high confidence

Add pre-signed URL generation endpoint for file uploads

A new REST controller endpoint at POST /files/pre-signed has been added to the file domain presentation layer. This endpoint accepts a request body containing file metadata (type and name) and delegates to the CreateFileUploadUrlUseCase to generate pre-signed URLs, enabling clients to upload files directly to storage.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/file/presentation · high confidence

Add request DTO for creating codes

A new \CreateCodeWebRequest\ DTO has been introduced in the presentation layer to handle incoming requests for code creation. This class validates the \codeType\ and \keyword\ fields and maps the input to the domain-level \CreateCodeRequest\, enabling the backend to process new code entries.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/code/presentation/dto · high confidence

Add request DTO for creating notices with attachments

A new CreateNoticeRequest data transfer object has been introduced in the notice domain to support creating notices. This class allows users to submit a notice title, content, and a list of attachments, where each attachment includes a URL and a specific type (AttachmentType). The implementation uses a standard constructor pattern rather than a builder, simplifying the creation of notice requests.

jobis-application/src/main/java/team/retum/jobis/domain/notice/dto/request · high confidence

Add request DTO for creating reviews

A new CreateReviewRequest data transfer object has been introduced to support the review creation API. This record captures the necessary input fields for submitting a review, including interview type, location, company and job code details, interviewer count, and a list of Q&A pairs along with specific question and answer text.

jobis-application/src/main/java/team/retum/jobis/domain/review/dto/request · high confidence

Added AcceptanceMapper for domain-entity conversion

A new AcceptanceMapper component has been introduced to handle the mapping between the Acceptance domain model and its persistence entity. This mapper leverages CompanyJpaRepository and StudentJpaRepository to resolve company and student references during entity creation, ensuring that acceptance records are correctly linked to their respective companies and students when persisted.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/acceptance/persistence/mapper · high confidence

Added BugReportJpaRepository for bug report persistence

A new Spring Data JPA repository interface, BugReportJpaRepository, has been introduced to handle persistence operations for bug reports. This interface extends JpaRepository and is configured to work with the BugReportEntity, enabling standard CRUD operations for bug report data within the infrastructure layer.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bug/persistence/repository · high confidence

Added BugReportMapper for domain-entity conversion

Introduced the BugReportMapper component in the infrastructure layer to handle bidirectional mapping between the BugReport domain model and its corresponding persistence entities (BugReportEntity, BugAttachmentEntity). This mapper facilitates the conversion of bug report data, including student references and attachment URLs, ensuring consistent data transformation between the domain and persistence layers.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bug/persistence/mapper · high confidence

Added CodeMapper for domain-entity conversion

Introduced a new CodeMapper component in the infrastructure layer to handle bidirectional mapping between the Code domain model and the CodeEntity persistence entity. This mapper facilitates the conversion of code data for storage and retrieval, including handling parent code relationships via the CodeJpaRepository.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/code/persistence/mapper · high confidence

Added Company repository interface

Introduced the CompanyJpaRepository interface to handle persistence operations for CompanyEntity. This new repository provides methods to check for business number existence, retrieve companies by ID, and find companies by business number, enabling the application layer to interact with company data in the database.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/persistence/repository · high confidence

Added Gradle wrapper configuration

The project now includes a Gradle wrapper configuration file (gradle-wrapper.properties) that specifies the use of Gradle version 7.5.1. This ensures that all developers and build environments use the same Gradle distribution, improving build consistency and reproducibility across the team.

gradle · high confidence

Added Interest domain model

Introduced the Interest entity within the application domain layer, defining the data structure for user interests with fields for ID, student ID, and interest code.

jobis-application/src/main/java/team/retum/jobis/domain/interest/model · high confidence

Added StringListConverter for JPA attribute conversion

A new JPA AttributeConverter has been introduced to automatically map between Java List\<String\> fields and comma-separated String columns in the database. This allows entities to store and retrieve list data as a single string field without manual serialization logic.

jobis-infrastructure/src/main/java/team/retum/jobis/global/converter · high confidence

Added TeacherJpaRepository interface

A new Spring Data JPA repository interface, TeacherJpaRepository, has been introduced in the teacher persistence layer. It extends JpaRepository for the TeacherEntity, providing standard CRUD operations and query methods for teacher data access.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/teacher/persistence/repository · high confidence

Added TeacherMapper for domain-entity conversion

A new TeacherMapper component has been introduced in the teacher persistence layer to handle conversions between the Teacher domain model and the TeacherEntity. The mapper uses the UserJpaRepository to resolve user references when converting a Teacher domain object into an entity, and constructs a Teacher domain object from an entity using only the ID.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/teacher/persistence/mapper · high confidence

Added UserMapper for domain-entity conversion

A new UserMapper component has been introduced to handle the mapping between the User domain model and the UserEntity persistence entity. This mapper facilitates the conversion of user data, including ID, authority, account ID, password, and token, ensuring consistent data transformation between the application's domain layer and the database persistence layer.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/user/persistence/mapper · high confidence

Added Winter Intern domain model and application ports

Introduced a new Winter Intern domain model and its corresponding application-layer ports. The \WinterIntern\ model tracks whether a user has completed a winter internship via the \isWinterInterned\ flag. The application layer now exposes \CommandWinterInternPort\ for saving winter intern records and \QueryWinterInternPort\ for checking winter intern status, enabling the system to manage and query winter internship participation.

jobis-application/src/main/java/team/retum/jobis/domain/intern/model, jobis-application/src/main/java/team/retum/jobis/domain/intern/spi · high confidence

Added code management use cases for creating and querying codes

The application now includes specific use cases to handle code generation and retrieval. Users can create new codes via the CreateCodeUseCase, which checks for existing codes by keyword and type before saving a new one, and query existing codes using QueryCodesUseCase, which filters results by keyword, type, and parent code.

jobis-application/src/main/java/team/retum/jobis/domain/code/usecase · high confidence

Added converter for recruitment progress types

A new JPA AttributeConverter has been introduced to handle the persistence of recruitment progress states. This component automatically serializes a list of ProgressType enums into a comma-separated string for database storage and deserializes it back into a list of enums when reading from the database, ensuring seamless data mapping for the recruitment domain.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/persistence/repository/converter · high confidence

Added domain events for notice creation and updates

New event classes, NoticePostedEvent and NoticeUpdatedEvent, have been introduced in the notice domain to capture and expose notice lifecycle changes. These events carry the affected Notice object, enabling downstream components to react when a notice is first posted or subsequently modified.

jobis-application/src/main/java/team/retum/jobis/domain/notice/event · high confidence

Added email template for signup authentication

A new Thymeleaf HTML template has been added to render the email sent to users during the signup process. This template displays the JOBIS branding, instructions for completing email address verification, and the specific authentication code passed via the 'code' variable, ensuring users receive the correct details to activate their accounts.

jobis-infrastructure/src/main/resources/templates · high confidence

Added event for tracking recently viewed companies

A new domain event, RecentCompanyEvent, has been introduced to capture interactions with company profiles. This event carries the user ID and company ID, enabling the system to track which companies a user has recently viewed, likely to support features like recent view history or personalized recommendations.

jobis-application/src/main/java/team/retum/jobis/domain/company/event · high confidence

Added event handler to track recently viewed companies in Redis

A new asynchronous event listener has been introduced to automatically record company views. When a user views a company, the system now publishes an event that triggers this handler to store the company ID in a Redis sorted set, using the current timestamp as the score. This data is retained for 30 days, enabling the application to maintain a history of recently viewed companies for each user.

jobis-infrastructure/src/main/java/team/retum/jobis/event/company · high confidence

Added filtering and sorting options for company list queries

Users can now filter and sort the list of companies. A new CompanyFilter DTO allows filtering by company type, name, region, business area, and year, while also supporting pagination with configurable page size. Additionally, a new CompanySortType enum enables sorting the company list by worker count or founding date in ascending or descending order.

jobis-application/src/main/java/team/retum/jobis/domain/company/dto · high confidence

Added health check endpoint

A new health check web adapter has been introduced, exposing a GET endpoint that returns 'OK' to allow external systems to verify the service's availability.

jobis-infrastructure/src/main/java/team/retum/jobis/domain · high confidence

Added interview persistence repositories and query view object

New JPA repository interfaces for DocumentNumber and Interview entities have been added to support data access for the interview domain. Additionally, a QueryInterviewVO class was introduced to facilitate querying interview details, including the document number ID, which aligns with the requirement to display the document ID in responses.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/interview/persistence/repository · high confidence

Added notification persistence mappers

Introduced NotificationMapper and TopicSubscriptionMapper to handle data conversion between domain models and persistence entities. NotificationMapper manages the mapping for Notification objects, including device token and user reference handling, while TopicSubscriptionMapper handles the mapping for TopicSubscription entities, enabling proper storage and retrieval of notification preferences.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notification/persistence/mapper · high confidence

Added persistence entities for interview scheduling and document numbers

New JPA entities have been introduced to support the interview domain: DocumentNumberEntity maps to the 'tbl\_document\_number' table to store unique document numbers, and InterviewEntity maps to the 'tbl\_interview' table to record interview details including type, dates, time, company, location, and associations with students and document numbers.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/interview/persistence/entity · high confidence

Added persistence mappers for AuthCode and RefreshToken

New mapper components have been introduced in the auth persistence layer to handle conversion between domain models and database entities. The AuthCodeMapper maps authentication codes including email, verification status, and TTL, while the RefreshTokenMapper handles refresh tokens, including user ID, authority, platform type, and TTL. These mappers enable the infrastructure layer to properly persist and retrieve authentication-related data.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/auth/persistence/mapper · high confidence

Added repository and query object for acceptance data access

Introduced the AcceptanceJpaRepository interface to enable database queries for acceptance records, specifically adding a method to retrieve acceptances by company ID and year. Additionally, added the QueryAcceptanceVO class to support QueryDSL projections for acceptance data, allowing efficient fetching of student-related acceptance details such as grade, class, number, name, and contract date.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/acceptance/persistence/repository · high confidence

Addition of common utility classes for date, file, number, and string operations

New utility classes have been introduced in the common package to standardize recurring operations. DateUtil provides a method to check if a date falls within a specified range, handling null boundaries. FileUtil validates file extensions against allowed types for logos and general files, throwing an exception for invalid types, and generates unique full file names. NumberUtil calculates the total number of pages required for pagination based on a total count and limit. StringUtil offers methods to join a list of strings with a specific delimiter and to split a string into a list, handling null or empty inputs gracefully.

jobis-application/src/main/java/team/retum/jobis/common/util · high confidence

Application status change notifications now include detailed, status-specific messages

The system now sends tailored push notifications to students when their application status changes. A new ApplicationMessage class defines specific titles and content for each status (e.g., 'Application Submitted', 'Approved', 'Passed', 'Rejected'), replacing generic messages. The ApplicationEventHandler processes these events asynchronously after transaction commit, ensuring users receive timely and context-aware updates about their application progress.

jobis-infrastructure/src/main/java/team/retum/jobis/event/application · high confidence

Async notifications for new and updated notices

The system now automatically sends push notifications to students when a notice is posted or updated. This is handled by the new NoticeEventHandler, which listens for NoticePostedEvent and NoticeUpdatedEvent. Upon these events, it retrieves device tokens for users subscribed to the NOTICE topic, constructs a Notification object (with a '\[공지사항 수정\]' prefix for updates), saves it via CommandNotificationPort, and publishes it via RabbitMqProducer. The processing is asynchronous and occurs after the transaction commits.

jobis-infrastructure/src/main/java/team/retum/jobis/event/notice · high confidence

Asynchronous email delivery via SMTP

The application now supports sending emails through an SMTP server using a new infrastructure layer. This change introduces asynchronous email sending, allowing the application to process email requests without blocking the main thread. Users will experience non-blocking behavior when authentication codes or other notifications are sent via email, with the system leveraging a dedicated thread pool for these operations.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/smtp · high confidence

Asynchronous exception notifications via webhook

The application now automatically sends exception details to a configured webhook when an exception event occurs. This is implemented by introducing an \ExceptionEvent\ model and an \ExceptionEventHandler\ component that listens for these events and asynchronously dispatches the request and exception information using \WebhookUtil\, ensuring that error reporting does not block the main execution thread.

jobis-infrastructure/src/main/java/team/retum/jobis/event/exception · high confidence

Automated notifications for recruitment status changes and interest-code matches

The system now automatically sends push notifications to students when specific recruitment events occur. When a bookmarked recruitment period ends, all students who bookmarked that recruitment receive a notification stating that the recruitment has closed. Additionally, when a new recruitment is posted that matches a student's interest code, those students receive a notification inviting them to view the new opportunity. These notifications are handled asynchronously via a new \RecruitmentEventHandler\ that listens for \RecruitmentStatusChangedEvent\ and \InterestedRecruitmentEvent\, persisting the notifications and publishing them via RabbitMQ.

jobis-infrastructure/src/main/java/team/retum/jobis/event/recruitment · high confidence

The system now exposes a new REST controller at /banners that allows users to create, delete, and query banners. This includes a general list view, a teacher-specific view filtered by an 'is\_opened' status, and operations to add or remove individual banners.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/banner/presentation · high confidence

The application now includes dedicated use cases for managing banners, enabling users to create new banners with specific details (title, content, type, dates, and a detail ID), delete existing banners, query the current list of active banners, and filter banners for teachers based on their open status. Additionally, a background process is available to automatically remove expired banners.

jobis-application/src/main/java/team/retum/jobis/domain/banner/usecase · high confidence

Bookmark management web endpoints introduced

The BookmarkWebAdapter now exposes REST endpoints for managing bookmarks. Users can toggle a bookmark for a specific recruitment via a PATCH request to /bookmarks/{recruitment-id}, which also clears the recruitment cache to ensure data consistency. Additionally, a GET request to /bookmarks allows users to retrieve their list of bookmarked items.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bookmark/presentation · high confidence

Bookmark persistence mapping logic introduced

A new BookmarkMapper component has been added to the infrastructure layer to handle the conversion between the Bookmark domain model and its database entity representation. This mapper utilizes the Recruitment and Student repositories to resolve references during entity creation, ensuring that bookmark records are correctly linked to their associated recruitment and student data.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bookmark/persistence/mapper · high confidence

Bookmark persistence repository implementation

The infrastructure layer now includes a JPA repository for the Bookmark domain, enabling the application to persist and query bookmark records. This repository provides methods to find a bookmark by recruitment and student ID, and to check for the existence of a bookmark for a specific student-recruitment pair, supporting the core bookmarking functionality.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bookmark/persistence/repository · high confidence

Bug report notifications are now sent via webhook

The system now automatically notifies administrators when a bug report is submitted. A new event-driven flow has been introduced where the application layer defines a BugReportEvent, and the infrastructure layer listens for this event after a transaction commits. Upon successful submission, an asynchronous handler invokes the WebhookUtil to send the bug report details and author information to an external webhook endpoint.

jobis-application/src/main/java/team/retum/jobis/domain/bug/event, jobis-infrastructure/src/main/java/team/retum/jobis/event/bug · high confidence

Bug report submission and inquiry features added

Users can now submit bug reports and view their details or lists. The application layer introduces use cases for creating bug reports (including title, content, development area, and attachment URLs) and querying bug report details or filtering reports by development area. These changes implement the application-side logic for the bug domain, utilizing ports for persistence and event publishing.

jobis-application/src/main/java/team/retum/jobis/domain/bug/usecase · high confidence

Bug reporting API endpoints added

A new REST controller has been introduced at the /bugs path to allow users to submit bug reports and query existing ones. The API supports creating a new bug report via POST, listing reports with an optional filter by development area via GET, and retrieving details for a specific report by ID.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bug/presentation · high confidence

Company management API web adapter introduced

A new CompanyWebAdapter REST controller has been added to expose company-related endpoints. This includes APIs for registering companies, checking existence by business number, updating company details and type, and querying company lists with pagination and sorting for both students and teachers. It also provides endpoints for viewing a user's company page, retrieving company details, exporting recruitment history to Excel, and counting total companies based on various filters.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/presentation · high confidence

FCM notification service implementation

The application now supports sending push notifications via Firebase Cloud Messaging. A new Firebase configuration initializes the client using a JSON key provided via the fcm.json property, and a utility component provides methods to send messages to specific device tokens or topic subscriptions, including platform-specific configurations for Android and iOS.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/fcm · high confidence

Implement bookmark persistence with detailed student and user queries

The bookmark persistence layer is now implemented via BookmarkPersistenceAdapter, providing the data access methods defined in BookmarkPort. This includes standard CRUD operations (save, delete, exists) and two complex read queries: one that returns a student's bookmarked recruitments with company details and job keywords, and another that retrieves the list of users who bookmarked specific recruitments.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bookmark/persistence · high confidence

Initial domain scaffolding for Student and Teacher modules

This change introduces the foundational structure for the Student and Teacher domains within the application layer. For Students, it adds specific exception classes (ClassRoomNotFoundException, StudentAlreadyExistsException, StudentNotFoundException) and their corresponding error codes, enabling precise error handling for student-related operations. For Teachers, it establishes the basic domain model (Teacher entity) and a TeacherNotFoundException, laying the groundwork for teacher-specific logic and error management.

jobis-application/src/main/java/team/retum/jobis/domain/student/exception, jobis-application/src/main/java/team/retum/jobis/domain/teacher · high confidence

Initial project scaffolding and configuration

The repository has been initialized with essential project configuration files. This includes a Dockerfile for containerization (using Eclipse Temurin 17 JRE, exposing port 8080, and packaging the application as a JAR), Gradle wrapper scripts (gradlew, gradlew.bat) for build management, and a .gitignore file that excludes build artifacts, IDE settings, and AI agent files (Claude Code, AGENTS.md). Additionally, a .coderabbit.yml file has been added to configure the CodeRabbit AI review tool with a 'chill' profile and auto-reply features, and a License file (MIT) has been included.

(repo-wide) · high confidence

Integration with external business number and interest company APIs

The application now integrates with external services to validate company existence via business numbers and retrieve recommended companies based on major and technology fields. This is implemented through a new Feign client adapter that handles API calls, response parsing, and error mapping for these third-party interactions.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/api · high confidence

Interest management API implementation

Students can now manage their personal interests and view related opportunities. The new use cases allow users to toggle specific interest codes (jobs or technologies) on or off, query their current list of saved interests, and retrieve a list of active recruitments that match their selected interests. This functionality is implemented through dedicated application-layer use cases that coordinate with security, code, and recruitment ports to provide a unified interest-based discovery experience.

jobis-application/src/main/java/team/retum/jobis/domain/interest/usecase · high confidence

Interview domain: document numbers, scheduling, and notifications

This change introduces the core application logic for the interview domain, enabling administrators to create, update, and delete document numbers and link them to specific interview schedules. Students can now set interview details (type, dates, company, location) and query their interviews using filters for year, month, company, and type. Additionally, the system now automatically sends timed notifications to students for interviews happening today, tomorrow, in three days, and after the interview has concluded.

jobis-application/src/main/java/team/retum/jobis/domain/interview · high confidence

Interview schedule notifications are now sent to students

A new event handler has been added to process interview notification events. When an interview event occurs, the system now asynchronously creates and saves a push notification for the student, including details like company name, time, and location, and publishes it via RabbitMQ. This ensures students receive timely alerts about their scheduled interviews.

jobis-infrastructure/src/main/java/team/retum/jobis/event/interview · high confidence

Interview scheduling and document number management APIs

This change introduces new REST endpoints for managing interview schedules and official document numbers. Users can now create, query, update, and delete document numbers (CRUD) via the /document-numbers endpoint, with detail views including linked interviews. Additionally, a new /interviews endpoint allows creating interview schedules and querying them with filters for year, month, company name, and interview type. The backend persistence layer implements these capabilities using JPA and QueryDSL, ensuring robust filtering logic for date ranges and document number uniqueness.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/interview/persistence · high confidence

Introduce ApplicationMapper for domain-entity conversion

Added ApplicationMapper to handle bidirectional conversion between the Application domain model and its corresponding persistence entities. This mapper manages the transformation of application details, including student and recruitment references, attachment URLs, and rejection attachments, ensuring consistent data mapping between the domain layer and the infrastructure persistence layer.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/application/persistence/mapper · high confidence

Introduce QueryDSL-specific Value Objects for Company Data

Added new QueryDSL projection classes (QueryCompanyDetailsVO, QueryCompanyVO, QueryReviewAvailableCompanyVO, QueryTeacherEmployCompaniesVO, StudentQueryCompaniesVO, and TeacherQueryCompaniesVO) in the infrastructure layer. These classes extend existing domain SPI Value Objects and use QueryProjection to map database query results directly to structured data, enabling efficient retrieval of company details, lists for students and teachers, and review-available companies without manual mapping overhead.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/persistence/repository/vo · high confidence

Introduce bug report domain models

Added new domain models for the bug reporting feature: BugReport (containing title, content, development area, student ID, attachments, and timestamp), BugAttachment (wrapping a list of attachment URLs), and the DevelopmentArea enum (ALL, SERVER, WEB, ANDROID, IOS). These classes define the structure of bug reports and their associated metadata within the application layer.

jobis-application/src/main/java/team/retum/jobis/domain/bug/model · high confidence

Introduce bug report persistence adapter

Added the BugReportPersistenceAdapter in the infrastructure layer to implement the BugReportPort interface. This component handles saving bug reports, retrieving them by ID with error handling, and fetching reports grouped by development area using QueryDSL, thereby enabling the backend to persist and query bug report data.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bug/persistence · high confidence

Introduce notice persistence mappers

Added NoticeMapper and ViewLogMapper components to handle conversion between domain models and persistence entities. NoticeMapper manages mapping for Notice and its attachments, while ViewLogMapper handles ViewLog entities by resolving associated Notice and Student references via repository lookups.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notice/persistence/mapper · high confidence

Introduce student domain models and department mapping logic

Added new domain models for the student module, including Student, SchoolNumber, Department, Gender, Portfolio, and VerifiedStudent. The SchoolNumber model now contains logic to parse school number strings and map a student's grade and class to a specific Department (Common, Software Develop, Embedded Software, AI Software, or Information Security). The Student model uses this mapping to automatically determine the department and entrance year during creation, and includes a method to check application eligibility based on grade and internship type.

jobis-application/src/main/java/team/retum/jobis/domain/student/model · high confidence

Introduction of Acceptance model for contract data

A new Acceptance model has been added to the application layer to represent acceptance-related data. This model includes fields for identification (id), temporal context (year, contractDate), business details (businessArea, tech stack), and relationships to entities (companyId, studentId), serving as a data structure for handling acceptance information within the system.

jobis-application/src/main/java/team/retum/jobis/domain/acceptance/model · high confidence

Introduction of Banner domain model and type enumeration

The application now includes the core domain model for the Banner feature. A new Banner entity has been added with fields for identification, title, content, start and end dates, and a reference to a detail ID. Additionally, a BannerType enumeration has been introduced to categorize banners into specific types such as Recruitment, Bookmark, Internship, Company, and Employment, enabling structured classification of banner content.

jobis-application/src/main/java/team/retum/jobis/domain/banner/model · high confidence

Introduction of Banner persistence entity

The system now persists banner data using a new BannerEntity mapped to the 'tbl\_banner' table. This entity stores the banner's title, content, type (BannerType), active date range (startDate/endDate), and an optional detail identifier (detailId), enabling the storage and retrieval of banner configurations within the application.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/banner/persistence/entity · high confidence

Introduction of Bookmark persistence entities

Added new JPA entity classes, BookmarkEntity and BookmarkId, to define the data model for the bookmark feature. The BookmarkEntity maps to the 'tbl\_bookmark' table and establishes a composite primary key using the BookmarkId class, linking students to specific recruitment opportunities via many-to-one relationships.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bookmark/persistence/entity · high confidence

Introduction of FilePort interface for file upload URL generation

A new FilePort interface has been added to the file domain SPI, defining a contract for generating file upload URLs. This interface exposes a single method, generateFileUploadUrl, which accepts a full file name and returns the corresponding upload URL, enabling the application layer to request pre-signed URLs for file uploads.

jobis-application/src/main/java/team/retum/jobis/domain/file/spi · high confidence

Introduction of FileType enum for file extension validation

A new FileType enum has been added to the file domain model to define and validate supported file extensions. This enum categorizes files into LOGO\_IMAGE (supporting .jpg, .png, .svg) and EXTENSION\_FILE (supporting a broader range including .pdf, .ppt, .doc, .zip, .mp4, and others), providing a centralized list of valid extensions for file handling within the application.

jobis-application/src/main/java/team/retum/jobis/domain/file/model · high confidence

Introduction of Redis-backed persistence entities for authentication

New entity classes, AuthCodeEntity and RefreshTokenEntity, have been added to the infrastructure layer to support storing authentication codes and refresh tokens in Redis. AuthCodeEntity manages verification codes with TTL and indexed lookup by email, while RefreshTokenEntity stores token details including user ID, authority, platform type, and TTL, and includes a method to update the token value.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/auth/persistence/entity · high confidence

Introduction of User domain model with token management capabilities

A new User model has been added to the application layer, defining core user attributes including ID, account ID, password, authority, and a device token. This model introduces specific behaviors for managing device tokens: users can now set a token (with a null-check to prevent overwriting with null values) or remove their device token entirely, while also retaining the ability to update their password.

jobis-application/src/main/java/team/retum/jobis/domain/user/model · high confidence

Introduction of UserJpaRepository with token-based query methods

A new UserJpaRepository interface has been added to the infrastructure layer, extending Spring Data's JpaRepository to provide persistence operations for the User domain. This repository introduces specific query methods including findByToken and findByTokenIsNotNull, which enable the system to locate users via authentication tokens and retrieve all users with active tokens, supporting features such as FCM subscription management and token-based user lookups.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/user/persistence/repository · high confidence

Introduction of Value Objects for Notice, Topic, and Viewer data

The application layer now defines specific Value Objects (VOs) to structure data returned by the Notice domain. NoticeVO encapsulates basic notice metadata (ID, title, creation time), TopicVO pairs a notification topic with a subscription status flag, and ViewerVO tracks student viewing details including identity and a formatted GCN string. These VOs provide a structured, immutable view of notice-related data for downstream consumers.

jobis-application/src/main/java/team/retum/jobis/domain/notice/spi/vo · high confidence

Introduction of WebhookUtil interface for bug and exception reporting

A new WebhookUtil interface has been added to the webhook infrastructure package, defining contracts for sending bug reports and exception information. This interface specifies methods to transmit BugReport data and HTTP request exception details, establishing the foundation for webhook-based error notification capabilities within the application.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/webhook · high confidence

Introduction of application-layer annotations for transaction management and domain modeling

The application module now includes four new custom annotations in the \team.retum.jobis.common.annotation\ package to standardize code structure and transaction handling. \UseCase\ and \ReadOnlyUseCase\ are introduced to mark use-case classes, automatically applying Spring's \@Transactional\ and \@Transactional(readOnly = true)\ behaviors respectively. Additionally, \Aggregate\ and \Service\ annotations are added to support domain-driven design patterns and service-layer identification.

jobis-application/src/main/java/team/retum/jobis/common/annotation · high confidence

Introduction of authentication persistence repositories

New Spring Data repositories have been added to manage authentication data persistence. The AuthCodeRepository provides a method to check if a verified code exists for a given email, while the RefreshTokenRepository enables lookup of refresh tokens by both the token string and user ID, with support for filtering by PlatformType.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/auth/persistence/repository · high confidence

Introduction of code domain models and enums

New domain models and enumerations have been added to the code model package to support the management of job and technology codes. This includes the \Code\ entity with fields for type, keyword, and public status, along with a \changeAccessible\ method to update visibility. Supporting types include \CodeType\ (TECH, JOB, BUSINESS\_AREA), \JobType\ (WEB, APP, GAME, etc.), \CodeResponse\ for data transfer, and \RecruitAreaCode\ to link recruitment areas with specific codes.

jobis-application/src/main/java/team/retum/jobis/domain/code/model · high confidence

Introduction of custom error handling infrastructure

The application now includes a dedicated error handling layer within the \jobis-application\ module. This introduces a \JobisException\ runtime class that wraps custom \ErrorProperty\ definitions, allowing for structured error responses. To support this, a local \HttpStatus\ enum has been added to define standard HTTP status codes (such as 200, 400, 404, 500) independently, and an \ErrorProperty\ interface defines the contract for error details (status and message). A placeholder directory for acceptance domain exceptions has also been created.

jobis-application/src/main/java/team/retum/jobis/common/error, jobis-application/src/main/java/team/retum/jobis/domain/acceptance/exception · high confidence

Introduction of embeddable persistence types for recruitment data

New embeddable JPA types have been added to the infrastructure layer to model specific recruitment attributes: PayInfo (storing train pay and pay details), RecruitDate (storing start and finish dates), and WorkingHour (storing start and end times). These classes utilize Jakarta Persistence annotations to define column definitions and validation constraints, serving as reusable components for entity mapping within the recruitment domain.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/persistence/type · high confidence

Introduction of new request DTOs for company sign-in and auth code sending

Two new request DTOs have been added to the authentication presentation layer: CompanySignInWebRequest, which accepts a 10-character business number for company sign-in, and SendAuthCodeWebRequest, which accepts a student email and authentication code type. These classes utilize Jakarta validation annotations (e.g., @NotBlank, @Pattern) to enforce input constraints for these specific authentication flows.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/auth/presentation/dto · high confidence

Introduction of notification domain models for topic-based alerts

The application now includes core domain models to support a topic-based notification system. The \Notification\ model represents individual alerts, tracking details such as title, content, recipient user ID, device token, associated topic, and read status (via the \isNew\ flag and \read()\ method). The \Topic\ enum defines specific notification categories including APPLICATION, RECRUITMENT, NOTICE, WINTER\_INTERN, and INTERVIEW. Additionally, the \TopicSubscription\ model allows users to manage their subscription preferences for these topics, storing the device token, the specific topic, and the active subscription state.

jobis-application/src/main/java/team/retum/jobis/domain/notification/model · high confidence

Introduction of structured error response models

The application now uses dedicated response classes to standardize how errors are returned to clients. A new \ErrorResponse\ class provides a simple structure with a status code and message, derived from internal error properties. Additionally, a \ValidationErrorResponse\ class has been added to handle validation failures, specifically mapping field-level errors from Spring's \BindException\ and constraint violations from \ConstraintViolationException\ into a structured map for better client-side debugging.

jobis-infrastructure/src/main/java/team/retum/jobis/global/error/response · high confidence

Introduction of web request DTO for bug reporting

A new request DTO, CreateBugReportWebRequest, has been added to the bug presentation layer to handle incoming bug report submissions. This class defines the expected input fields (title, content, development area, and optional attachment URLs) and includes validation constraints using Jakarta annotations. It also provides a conversion method to map the web request data into the domain-level CreateBugReportRequest object, facilitating the flow of data from the presentation layer to the business logic.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bug/presentation/dto · high confidence

JWT authentication implementation

The JWT security module has been implemented to handle token-based authentication. This includes a JwtFilter to intercept requests and validate tokens, a JwtParser to extract user details and authority from tokens, and a JwtTokenAdapter that implements the JwtPort to generate access and refresh tokens. The system now supports different user authorities (Company, Student, Developer, Teacher) and platform types, with refresh tokens persisted in the database.

jobis-infrastructure/src/main/java/team/retum/jobis/global/security/jwt · high confidence

New Code Management API with Caching

A new REST controller for code management has been introduced at /codes, enabling users to query existing codes via GET requests (supporting filtering by type, keyword, and parent code) and create new codes via POST requests. The implementation includes Spring Cache integration: GET responses are cached when no keyword or parent code is specified, while POST requests trigger a cache eviction to ensure data consistency.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/code/presentation · high confidence

New DTOs for banner creation and querying

Added request and response data transfer objects to support banner functionality: CreateBannerRequest now accepts title, content, banner type, start/end dates, and a detail ID for creating banners, while QueryBannersResponse and TeacherQueryBannersResponse return lists of banners using BannerVO and TeacherBannersVO respectively.

jobis-application/src/main/java/team/retum/jobis/domain/banner/dto · high confidence

New DTOs for code management API

Added request and response data transfer objects to support the code generation API. This includes CreateCodeRequest for submitting new code entries (containing code type, job type, and keyword), CodesResponse for listing existing codes with their details, and CreateCodeResponse for returning the ID of a newly created code.

jobis-application/src/main/java/team/retum/jobis/domain/code/dto · high confidence

New DTOs for field trainee and contract worker queries

Added new request and response DTOs to support querying field trainees and contract workers. The new RegisterFieldTraineeRequest record accepts application IDs and date ranges for registration, while the TeacherQueryFieldTraineesAndContractWorkersResponse class structures the returned data, including student details (GCN, name) and relevant dates for both field trainees and contract workers.

jobis-application/src/main/java/team/retum/jobis/domain/acceptance/dto · high confidence

New DTOs for review filtering and search capabilities

Added two new data transfer objects to support review filtering and search features: ReviewFilter, which encapsulates pagination, interview type/location, company, keyword, year, and code filters for querying reviews, and QuestionElement, a simple record holding an ID and question text likely used in review-related options or search results.

jobis-application/src/main/java/team/retum/jobis/domain/review/dto · high confidence

New Excel export capability for company and recruitment data

The system now supports exporting company and recruitment information to Excel files. This new \ExcelAdapter\ component implements the \WriteFilePort\ interface to generate \.xlsx\ files containing structured data for both companies (including details like region, business area, and contact status) and teacher recruitments (including status, hiring counts, and dates). The implementation handles null values gracefully, such as displaying 'Permanent Recruitment' when date fields are missing, and formats the output with styled headers and auto-sized columns for better readability.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/paser · high confidence

New JPA repositories for code and recruit area management

The infrastructure layer now includes two new Spring Data JPA repository interfaces: CodeJpaRepository and RecruitAreaCodeJpaRepository. CodeJpaRepository provides methods to retrieve code entities by a list of codes or by keyword and type, supporting lookups for the CodeType model. RecruitAreaCodeJpaRepository enables fetching recruit area codes by recruit area ID and allows deleting all associated codes for a specific recruit area, facilitating the management of recruitment area data.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/code/persistence/repository · high confidence

New QueryDSL View Objects for Recruitment Data Access

Added six new QueryDSL view objects (QueryManualRecruitmentVO, QueryMyAllRecruitmentsVO, QueryRecruitAreaVO, QueryRecruitmentDetailVO, QueryStudentRecruitmentsVO, QueryTeacherRecruitmentsVO) in the infrastructure layer to map database query results to domain-specific value objects. These classes enable efficient retrieval of recruitment details, student/teacher lists, and area-specific data by projecting raw query results into structured responses, supporting features like manual recruitment queries, my recruitment lists, and detailed recruitment information display.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/persistence/repository/vo · high confidence

New Redis caching infrastructure for user data and recent company views

The application now uses Redis to cache frequently accessed data, including user profiles for students, teachers, and companies, as well as review data, with a default 30-minute TTL and a specific 10-minute TTL for these named caches. Additionally, a new feature allows the system to cache and retrieve the last 30 companies viewed by a student, stored via a sorted set in Redis. This is supported by a custom key generator and JSON serialization for cache entries.

jobis-infrastructure/src/main/java/team/retum/jobis/global/config/cache · high confidence

New Student Web Adapter for API Endpoints

Added StudentWebAdapter, a new REST controller that exposes student-related endpoints including signup, profile updates, password management, and a teacher query feature. The adapter integrates with various use cases to handle student registration, profile modifications, password changes, and student verification.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/student/presentation · high confidence

New User Web Adapter for Login and Device Token Management

A new UserWebAdapter controller has been introduced in the user presentation layer to handle user authentication and device token operations. This component exposes endpoints for user login, setting a device token, and removing a device token, delegating the business logic to their respective use cases (LoginUseCase, SetDeviceTokenUseCase, and RemoveDeviceTokenUseCase). The adapter utilizes Jakarta validation for request bodies and is mapped under the /users path.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/user/presentation · high confidence

New Value Objects for Recruitment Data Models

Introduced a set of new Value Objects (VOs) in the recruitment domain to structure data for various user views and administrative tasks. These include StudentRecruitmentVO and TeacherRecruitmentVO for listing recruitments with specific fields like status, pay, and military support; RecruitmentDetailVO for comprehensive job details including qualifications, working hours, and benefits; MyAllRecruitmentsVO for a user's personal recruitment list; ManualRecruitmentVO for manually registered entries; and RecruitmentAreaElement to define job roles and hiring counts. These VOs serve as the data transfer layer for the recruitment SPI, ensuring consistent data shaping across the application.

jobis-application/src/main/java/team/retum/jobis/domain/recruitment/spi/vo · high confidence

New acceptance domain use cases for field trainee and contract management

This change introduces five new application-layer use cases in the acceptance domain to support field trainee registration, contract date updates, employment contract registration, cancellation of field trainees, and querying field trainee/contract worker lists for teachers. Specifically, RegisterFieldTraineeUseCase handles converting applications to field trainees, RegisterEmploymentContractUseCase creates acceptance records and updates application status to ACCEPTANCE, CancelFieldTraineesUseCase reverts field trainee applications to PASS status, ChangeContractDateUseCase updates contract dates, and TeacherQueryFieldTraineesAndContractWorkersUseCase retrieves combined data for teachers. These use cases form the core business logic for managing the lifecycle of field trainees and employment contracts within the acceptance workflow.

jobis-application/src/main/java/team/retum/jobis/domain/acceptance/usecase · high confidence

New acceptance record entity for student-company contracts

A new persistence entity, AcceptanceEntity, has been added to model acceptance records linking students and companies. This entity stores details such as the academic year, student name, business area, required technologies, student GCN, and contract date, and establishes relationships with the Company and Student entities to support the acceptance workflow.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/acceptance/persistence/entity · high confidence

New application detail value objects for recruitment data

Added four new value objects in the application SPI layer to structure recruitment-related data: ApplicationDetailVO exposes core application identifiers, business area, and status; ApplicationVO aggregates student details, company information (including logo URL), attachments, and status; FieldTraineesVO models field training schedules with student identifiers; and PassedApplicationStudentsVO tracks passed applicants with their class and name details.

jobis-application/src/main/java/team/retum/jobis/domain/application/spi/vo · high confidence

New application query response DTOs with attachment and status details

The application layer now exposes a set of new response DTOs for querying applications across different user roles. Students can view their own applications via QueryMyApplicationsResponse, which includes company logos, attachment files, and application status. Companies can query applications via CompanyQueryApplicationsResponse, which includes student school numbers and attachments. Teachers can query applications via TeacherQueryApplicationsResponse, which includes student GCN, company names, attachments, and status. Additionally, new DTOs support querying application counts (ApplicationCountResponse, QueryEmploymentCountResponse), passed application students (QueryPassedApplicationStudentsResponse), and rejection reasons with attachments (QueryRejectionReasonResponse).

jobis-application/src/main/java/team/retum/jobis/domain/application/dto/response · high confidence

New authentication domain models, ports, and use cases

The auth module now includes dedicated domain models (AuthCode, RefreshToken, Authority, PlatformType), a TokenResponse DTO, and specific exception types (AuthCodeNotFoundException, BadAuthCodeException, etc.) to handle authentication errors. New SPI ports (AuthCodePort, RefreshTokenPort, JwtPort) define the interfaces for authentication operations. Use cases have been introduced for sending and verifying email auth codes (SendAuthCodeUseCase, VerifyAuthCodeUseCase), reissuing tokens (TokenReissueUseCase), and signing in companies (CompanySignInUseCase).

jobis-application/src/main/java/team/retum/jobis/domain/auth · high confidence

New company data view objects for API responses

Added six new Value Objects in the company domain SPI layer to structure API response data: CompanyDetailsVO for detailed company information, CompanyVO for basic company listings, RecentCompanyVO for recently viewed companies, StudentCompaniesVO and TeacherCompaniesVO for role-specific company lists, and TeacherEmployCompaniesVO for employment statistics. These objects define the shape of data returned to clients for company-related endpoints.

jobis-application/src/main/java/team/retum/jobis/domain/company/spi/vo · high confidence

New company management use cases for registration, updates, and queries

This change introduces a suite of new application-layer use cases in the company domain to support company registration, profile management, and various query operations. Teachers and administrators can now register companies (including manual registration by teachers), update company details and types, and manage MOU status. Students and teachers can query company lists with filtering and pagination, view company details (which now tracks recent views via an event), check review eligibility, and export company history to Excel. The system also validates company existence against external business registries during registration and prevents duplicate entries.

jobis-application/src/main/java/team/retum/jobis/domain/company/usecase · high confidence

New company query and management response DTOs

The application introduces a comprehensive set of new response Data Transfer Objects (DTOs) for the company domain, enabling detailed queries and management features. These include \CheckCompanyExistsResponse\ for existence checks, \CompanyCountResponse\ for total counts, and \EmploymentRatesResponse\ for class-based employment statistics. User-specific views are supported via \CompanyMyPageResponse\ (company profile details), \StudentQueryRecentCompaniesResponse\ (recently viewed companies), and \TeacherQueryCompaniesResponse\ (filtered lists with acceptance/review metrics). Additional DTOs like \QueryCompanyDetailsResponse\, \ExportCompanyHistoryResponse\ (for Excel export), and \QueryReviewAvailableCompaniesResponse\ facilitate specific administrative and reporting workflows.

jobis-application/src/main/java/team/retum/jobis/domain/company/dto/response · high confidence

New domain events for application status changes

The application layer now introduces two new domain events, ApplicationsStatusChangedEvent and SingleApplicationStatusChangedEvent, to signal when application statuses are updated. ApplicationsStatusChangedEvent carries a list of affected applications and the new status, supporting batch notifications, while SingleApplicationStatusChangedEvent carries a single application instance and its new status for individual notifications.

jobis-application/src/main/java/team/retum/jobis/domain/application/event · high confidence

New file upload request and response DTOs

The application now introduces specific Data Transfer Objects for the file domain to handle file upload operations. A new \FileRequest\ record is added to capture the file type and name, while response objects \CreateFileUploadUrlResponse\ and \FileUploadResponse\ are introduced to return pre-signed upload URLs and the resulting file URLs, respectively. These changes structure the data exchanged during the file upload workflow.

jobis-application/src/main/java/team/retum/jobis/domain/file/dto · high confidence

New notification management endpoints for topic subscription and notification reading

A new NotificationWebAdapter has been introduced to expose REST endpoints for managing user notifications and topic subscriptions. Users can now query their notifications with an optional filter for unread items, mark specific notifications as read via a PATCH request, toggle subscriptions for individual topics or all topics using PATCH requests, and retrieve the list of available notification topics.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notification/presentation · high confidence

New notification persistence entities for topic subscriptions

Added JPA entities to persist notification data and user topic subscription preferences. NotificationEntity maps to the 'tbl\_notification' table, storing message details (title, content), target user and device token, and metadata like topic and authority. TopicSubscriptionEntity, with a composite key (TopicSubscriptionId), maps to 'tbl\_topic\_subscription' to track whether a specific device token is subscribed to a given Topic, enabling users to toggle topic subscriptions.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notification/persistence/entity · high confidence

New notification subscription toggle use cases

Added three new application-layer use cases in the notification subscribe package to manage FCM topic subscriptions: SubscribeAllTopicsByToggleUseCase allows a user to toggle their subscription status for all notification topics at once; SubscribeTopicByToggleUseCase enables toggling the subscription for a single specific topic; and SubscribeAllUserUseCase provides a mechanism to subscribe all existing users with device tokens to all available topics.

jobis-application/src/main/java/team/retum/jobis/domain/notification/usecase/subscribe · high confidence

New persistence adapter for code domain

Added CodePersistenceAdapter implementing CodePort to handle code entity persistence. The adapter provides methods for retrieving codes by keyword and type, fetching by ID, bulk retrieval, and saving codes, while enforcing public visibility and parent code constraints in queries.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/code/persistence · high confidence

New persistence adapters for authentication codes and refresh tokens

The infrastructure layer now includes dedicated persistence adapters for authentication codes and refresh tokens. The AuthCodePersistenceAdapter implements the AuthCodePort interface, providing methods to save authentication codes and retrieve them by email, utilizing the AuthCodeRepository and AuthCodeMapper. Similarly, the RefreshTokenPersistenceAdapter implements the RefreshTokenPort interface, offering functionality to save, retrieve by token and platform type, and delete refresh tokens, leveraging the RefreshTokenRepository and RefreshTokenMapper. These adapters serve as the concrete implementation for the authentication-related SPIs within the persistence layer.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/auth/persistence · high confidence

New persistence entities for Student, Portfolio, and Verified Student

The infrastructure layer now includes new JPA entities to support student-related data persistence. StudentEntity maps the tbl\_student table, storing student details such as name, grade, class, number, gender, department, profile image, and entrance year, with a unique constraint on the combination of grade, class, number, and entrance year, and a one-to-one relationship with the user account. PortfolioEntity maps the tbl\_portfolio table to store a student's portfolio URL and links to the student. VerifiedStudentEntity maps the tbl\_verified\_student table to store a student's GCN and name for verification purposes.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/student/persistence/entity · high confidence

New persistence entities for code and recruitment area associations

Added JPA entity classes to model the code system and its relationship with recruitment areas. CodeEntity represents the core code table with fields for type, job type, keyword, public status, and parent code. RecruitAreaCodeEntity and its composite key RecruitAreaCodeId establish the many-to-many relationship between recruitment areas and codes, enabling the storage of code associations for specific recruitment areas.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/code/persistence/entity · high confidence

New persistence layer for review and Q&A data

This change introduces the infrastructure persistence adapters for the review domain, specifically adding QuestionPersistenceAdapter and ReviewPersistenceAdapter. These components implement the domain ports to handle data operations for reviews, Q&A entries, and questions, including filtering, pagination, and detail retrieval using QueryDSL. This provides the backend storage implementation for the review-related API features.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/review/persistence · high confidence

New persistence mappers for QnA, Question, and Review entities

Added three new mapper components (QnAMapper, QuestionMapper, ReviewMapper) in the review persistence layer to handle conversion between domain models and JPA entities. QnAMapper manages the relationship between QnA, Question, and Review entities, while ReviewMapper handles the mapping for Review entities including associated Company, Student, and Code references. QuestionMapper provides simple bidirectional conversion for Question entities.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/review/persistence/mapper · high confidence

New persistence mappers for Recruitment and RecruitArea entities

Added RecruitAreaMapper and RecruitmentMapper components to handle the conversion between domain models and JPA entities. The RecruitmentMapper maps fields such as recruiting period, salary, flexible working, winter intern status, and hire convertibility, while the RecruitAreaMapper handles the mapping of recruitment area details and associated codes.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/persistence/mapper · high confidence

New persistence mappers for Student and Portfolio entities

Added PortfolioMapper and StudentMapper components to handle conversion between domain models and persistence entities. The StudentMapper maps student details including school number, gender, and entrance year, while the PortfolioMapper handles portfolio URL and student association, enabling proper data persistence for student profiles and portfolios.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/student/persistence/mapper · high confidence

New recruitment domain events introduced

Two new event classes, InterestedRecruitmentEvent and RecruitmentStatusChangedEvent, have been added to the recruitment domain. InterestedRecruitmentEvent carries a single Recruitment object, while RecruitmentStatusChangedEvent carries a list of Recruitment objects, enabling the system to publish and handle specific recruitment-related state changes.

jobis-application/src/main/java/team/retum/jobis/domain/recruitment/event · high confidence

New recruitment filter DTOs with pagination and expanded filtering options

Two new DTOs, RecruitmentFilter and StudentRecruitmentFilter, have been introduced to standardize recruitment search criteria. These classes support filtering by year, date range, status, company name, and specific flags for winter internships and military support. StudentRecruitmentFilter adds further granularity with job codes, tech codes, and region filters. Both DTOs include pagination support via page and limit parameters, with an automatic offset calculation, enabling more flexible and performant recruitment listing queries.

jobis-application/src/main/java/team/retum/jobis/domain/recruitment/dto · high confidence

New repository interfaces for QnA, Question, and Review entities

The infrastructure layer now includes dedicated Spring Data repository interfaces for the QnA, Question, and Review domains. QnAJpaRepository and QuestionJpaRepository provide standard CRUD access to their respective entities, while ReviewJpaRepository adds a specific query method to check if a review already exists for a given company and student combination.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/review/persistence/repository · high confidence

New repository interfaces for recruitment data access

Added RecruitAreaJpaRepository and RecruitmentJpaRepository to handle persistence operations for recruitment entities. The RecruitmentJpaRepository now supports querying by creation date range, checking existence by company and winter intern status, and retrieving by company and winter intern flag, enabling more flexible recruitment data retrieval.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/persistence/repository · high confidence

New request DTO for banner creation

A new CreateBannerWebRequest class has been added to handle incoming banner creation requests. This DTO accepts title, content, banner type, start/end dates, and an optional detail ID, applying validation constraints such as size limits and date formatting. It provides a toDomainRequest method to map the web request data to the internal CreateBannerRequest domain object.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/banner/presentation/dto · high confidence

New request DTO for pre-signed URL creation

A new request body structure, CreatePreSignedUrlWebRequest, has been introduced to handle file upload requests. This DTO validates a list of files, requiring each entry to specify a file type and a file name that matches the configured regular expression pattern, ensuring that incoming requests for pre-signed URLs are properly structured and validated before processing.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/file/presentation/dto · high confidence

New request DTOs for acceptance and contract management

Added new web request DTOs to handle acceptance-related operations: CancelFieldTraineesWebRequest for canceling field trainees, ChangeContractDateWebRequest for updating contract dates with future date validation, RegisterEmploymentContractWebRequest for registering employment contracts, and RegisterFieldTraineeWebRequest for registering field trainees with date range validation. These DTOs use Jakarta validation annotations and include a toDomainRequest method in RegisterFieldTraineeWebRequest for converting to domain objects.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/acceptance/presentation/dto · high confidence

New request DTOs for application attachments and administrative actions

The application layer now includes new request data transfer objects to support file attachments and specific administrative workflows. A new \AttachmentRequest\ record allows passing file URLs and types, while \RejectionAttachmentRequest\ enables attaching files to application rejection reasons. Additionally, \ChangeFieldTrainDateRequest\ facilitates bulk updates to field training dates for multiple applications, and \CreateNonSchoolContactPassApplicationsRequest\ supports creating pass applications for students outside of school contacts.

jobis-application/src/main/java/team/retum/jobis/domain/application/dto/request · high confidence

New request DTOs for company registration and updates

The application introduces three new request DTOs in the company domain to handle company data input: RegisterCompanyRequest for initial company registration (including fields like business number, address, manager details, and a headquarter flag), TeacherRegisterCompanyRequest for simplified teacher-led company registration, and UpdateCompanyDetailsRequest for modifying existing company information. These records define the specific fields accepted by the API for creating and updating company profiles.

jobis-application/src/main/java/team/retum/jobis/domain/company/dto/request · high confidence

New request DTOs for creating and updating notices

Added CreateNoticeWebRequest and UpdateNoticeWebRequest classes to handle incoming notice creation and update requests. CreateNoticeWebRequest includes title, content, and a list of attachments with URL and type, while UpdateNoticeWebRequest contains title and content fields. Both classes use validation annotations to ensure required fields are not blank.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notice/presentation/dto · high confidence

New request DTOs for interview scheduling and document number management

Added two new presentation-layer DTOs to support the interview scheduling API and document number operations. InterviewWebRequest now accepts interview details (type, dates, time, company, location, student ID) and includes validation logic to enforce interview time format constraints before mapping to the domain model. DocumentNumberWebRequest introduces a request structure for creating or modifying document numbers, allowing them to be linked to specific interview IDs.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/interview/presentation/dto · high confidence

New request DTOs for login and device token management

The presentation layer now includes dedicated request DTOs for user authentication and device configuration. A new LoginWebRequest class handles login inputs, including account ID, password, platform type, and an optional device token, while a new SetDeviceTokenWebRequest class manages requests to update a user's device token. These classes utilize Jakarta validation annotations to enforce input constraints before mapping to domain models.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/user/presentation/dto · high confidence

New review management capabilities: create, delete, and detailed query operations

This change introduces a comprehensive set of use cases for managing interview reviews within the application layer. Users can now create new reviews (including associated Q&A pairs) via CreateReviewUseCase, delete existing reviews via DeleteReviewUseCase, and retrieve their own review history via QueryMyReviewsUseCase. Additionally, the system supports browsing all reviews with filtering and pagination (QueryReviewsUseCase), viewing specific review details with Q&A (QueryReviewDetailUseCase), and fetching available question options (QueryReviewQuestionsUseCase). These use cases enforce business rules such as preventing duplicate reviews by the same student for the same company and validating company/code existence.

jobis-application/src/main/java/team/retum/jobis/domain/review/usecase · high confidence

New scheduled tasks for banners, interviews, and recruitment status

The infrastructure layer now includes several new scheduler components that automate background operations. BannerScheduler cleans up expired banners daily at midnight. InterviewScheduler sends notifications for today's interviews at 7 AM, upcoming interviews (1-3 days out) at 9 AM, and post-interview updates at 6 PM. RecruitmentScheduler updates recruitment request statuses daily at midnight. InterestedRecruitmentScheduler notifies users about new recruitment requests matching their interests at 8:20 AM. FcmScheduler subscribes all users with device tokens to all topics on April 2nd at 9:25 AM.

jobis-infrastructure/src/main/java/team/retum/jobis/global/scheduler · high confidence

New student persistence repositories for existence checks and verification

The infrastructure layer now includes new repository interfaces and implementations to handle student data persistence. StudentJpaRepository provides methods to check for duplicate student records based on grade, class, number, and name, as well as to count students by grade and entrance year, and to fetch a student with their associated user entity. Additionally, VerifiedStudentJpaRepository and VerifiedStudentRepository have been added to manage verified student records, allowing for existence checks and deletion based on GCN and name.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/student/persistence/repository · high confidence

New use case for generating file upload URLs

A new CreateFileUploadUrlUseCase has been added to the file domain, enabling the system to generate presigned upload URLs for multiple files in a single request. This use case processes a list of file requests, generates unique full file names using FileUtil, and returns the corresponding upload URLs via the FilePort.

jobis-application/src/main/java/team/retum/jobis/domain/file/usecase · high confidence

New winter internship domain events introduced

Two new event classes, WinterInternRegisteredEvent and WinterInternToggledEvent, have been added to the application layer. WinterInternRegisteredEvent carries a Recruitment object to signal when a winter internship recruitment is registered, while WinterInternToggledEvent carries a WinterIntern object to indicate when a winter internship status is toggled. These events enable downstream handlers to react to specific winter internship lifecycle changes.

jobis-application/src/main/java/team/retum/jobis/domain/intern/event · high confidence

Notice management API endpoints exposed

The NoticeWebAdapter now exposes REST endpoints for managing notices, including creating, updating, and deleting notices, as well as querying notice lists and details. Additionally, it supports recording view counts for notices and querying the list of users who have viewed a specific notice.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notice/presentation · high confidence

Notice management use cases implemented with view tracking and event publishing

The application now includes a complete set of use cases for managing notices, allowing administrators to create, update, and delete notices, while users can view notice lists, details, and specific viewers. A new view-tracking feature records individual student views to prevent duplicate counting and exposes view counts and viewer lists. Additionally, creating or updating a notice automatically publishes domain events to trigger downstream notifications.

jobis-application/src/main/java/team/retum/jobis/domain/notice/usecase · high confidence

Notice view tracking and persistence implementation

The notice persistence layer now includes a ViewLogPersistenceAdapter that records and queries view logs for notices. This enables the system to track which students have viewed a notice, count total views per notice, and retrieve a list of viewers with their details (student ID, name, grade, class, number, and view timestamp). The existing NoticePersistenceAdapter remains responsible for basic notice CRUD operations.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notice/persistence · high confidence

Notice view tracking and read counts

The application now tracks when students view notices. This change introduces new ports to save view logs, check if a student has already read a notice, count total views, and list viewers, enabling the system to display read counts and view history for notices.

jobis-application/src/main/java/team/retum/jobis/domain/notice/spi · high confidence

Notice view tracking and repository refactoring

The notice module now supports tracking view counts by introducing a new ViewLog entity and a corresponding ViewLogJpaRepository to persist view events. The existing NoticeJpaRepository has been refactored to extend Spring Data's JpaRepository, and new QueryDSL value objects (QueryNoticeVO, QueryViewerVO) have been added to support structured data projection for notice listings and viewer details.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notice/persistence/repository · high confidence

Notification persistence layer implementation

The notification persistence layer is now implemented with two new adapter classes: NotificationPersistenceAdapter and TopicSubscriptionPersistenceAdapter. These adapters handle saving and retrieving notifications, managing topic subscriptions for users, and integrating with Firebase Cloud Messaging (FCM) for push notifications. The implementation includes logic for subscribing/unsubscribing to topics, retrieving notifications by user and read status, and managing default topic subscriptions for new users.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/acceptance/persistence, jobis-infrastructure/src/main/java/team/retum/jobis/domain/banner/persistence/mapper, jobis-infrastructure/src/main/java/team/retum/jobis/domain/notification/persistence · high confidence

Notification query and read APIs

Users can now retrieve their notifications with an optional filter for unread items, view available notification topics, and mark individual notifications as read. This change introduces the QueryNotificationsUseCase, QueryTopicsUseCase, and ReadNotificationUseCase along with their corresponding response DTOs, enabling clients to fetch notification lists, subscribe to topic categories, and update notification status.

jobis-application/src/main/java/team/retum/jobis/domain/notification/usecase · high confidence

S3 file upload integration via presigned URLs

The application now supports uploading files to Amazon S3 using presigned URLs. This change introduces an S3 adapter that implements the FilePort interface to generate secure, time-limited upload URLs, a configuration class to initialize the AWS S3 client with credentials and region settings, and properties to manage the S3 bucket and URL details.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/s3 · high confidence

Slack integration for bug reports and server exceptions

The application now sends notifications to Slack for two key events: when a user submits a bug report and when a server exception occurs. Bug reports are formatted with details like title, content, development area, and reporter, and include attached images if present. Server exceptions trigger alerts with the request URI, method, timestamp, and stack trace. This is implemented via a new SlackAdapter and SlackConfig in the infrastructure layer.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/webhook/slack · high confidence

Student account management and profile features

This change introduces the core use cases and DTOs for student self-service operations. Users can now sign up with a new account (including device token and platform type handling), view their profile information via a dedicated my-page endpoint, and manage their account settings by updating their password (both current and forgotten password flows) or changing their profile image. Additionally, a verification use case is added to validate student identity during the signup process, and a teacher-facing query use case is introduced to allow teachers to search for students by name.

jobis-application/src/main/java/team/retum/jobis/domain/student/usecase · high confidence

Student authentication details and caching service

The system now includes a dedicated Spring Security implementation for student authentication. A new StudentDetails class adapts the StudentEntity to the UserDetails interface, exposing the student ID as the username and assigning the STUDENT authority. The accompanying StudentDetailsService loads student data via the repository and integrates Spring Cache to cache these user details, improving authentication performance by reducing repeated database lookups for valid tokens.

jobis-infrastructure/src/main/java/team/retum/jobis/global/security/auth/student, jobis-infrastructure/src/main/java/team/retum/jobis/global/security/auth/teacher · high confidence

Student interest management API and persistence layer

This change introduces the infrastructure components for managing student interests, including a new REST controller at /interests that exposes endpoints to toggle interests, query a student's current interests, and retrieve recruitment data based on those interests. The implementation adds the JPA entity (tbl\_interest), repository, mapper, and persistence adapter to handle storage and retrieval of interest records linked to students and codes.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/interest · high confidence

Support for file attachments in job applications and rejections

The application persistence layer now supports attaching files to both job applications and their subsequent rejections. New entity classes—ApplicationAttachmentEntity, ApplicationRejectionAttachmentEntity, and the updated ApplicationEntity—enable users to upload supporting documents when applying and allow administrators to attach evidence or notices when rejecting an application. The ApplicationEntity also includes an updatedAt timestamp to track changes.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/application/persistence/entity · high confidence

User login and device token management use cases

The application now includes specific use cases for handling user authentication and device token lifecycle. LoginUseCase validates credentials via UserChecker, associates the user's device token, and generates JWT tokens. New SetDeviceTokenUseCase and RemoveDeviceTokenUseCase allow authenticated users to update or clear their registered device tokens, supporting push notification capabilities.

jobis-application/src/main/java/team/retum/jobis/domain/user/usecase · high confidence

Winter Intern activation and registration notifications

A new event handler has been added to automatically send push notifications to students when the Winter Intern program is toggled on or when a new recruitment is registered. Upon activation, students receive a general announcement, while new postings trigger specific alerts containing the company name and a link to the recruitment details.

jobis-infrastructure/src/main/java/team/retum/jobis/event/intern · high confidence

Winter Intern activation toggle and status query

Users can now toggle the winter internship program on or off via the new ToggleWinterInternUseCase, which updates the system state and publishes a WinterInternToggledEvent upon change. Additionally, the new QueryIsWinterInternUseCase allows checking the current status of the winter internship program.

jobis-application/src/main/java/team/retum/jobis/domain/intern/usecase · high confidence

Winter Intern status management API and persistence layer

Added a new persistence and presentation layer for managing the global 'Winter Intern' status. This includes a new database table (tbl\_winter\_intern) to store the boolean flag, a JPA repository and QueryDSL-based adapter for data access, and a REST controller exposing GET /winter-intern to query the current status and PATCH /winter-intern to toggle it.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/intern · high confidence

Architecture

Application domain SPI refactored into Command and Query ports

The application layer's data access interface has been restructured to separate write and read operations. The previous monolithic ApplicationPort is replaced by a composite interface that extends two new specialized ports: CommandApplicationPort, which handles application creation, deletion, and status updates, and QueryApplicationPort, which provides filtering, pagination, and detail retrieval methods. This change clarifies the boundary between mutating and querying application data within the domain.

jobis-application/src/main/java/team/retum/jobis/domain/application/spi · high confidence

The application layer now exposes a structured set of ports for banner management, separating command and query responsibilities. CommandBannerPort defines operations to save, delete, and remove expired banners, while QueryBannerPort provides methods to retrieve a specific banner by ID, fetch currently active banners, and list banners filtered by their open status. These interfaces serve as the contract for the banner domain's external interactions.

jobis-application/src/main/java/team/retum/jobis/domain/banner/spi · high confidence

Company domain ports refactored into separate Command and Query interfaces

The company domain's persistence abstraction has been restructured to separate write and read operations. The previous monolithic CompanyPort is now split into CommandCompanyPort (handling save and saveAll operations) and QueryCompanyPort (handling retrieval, filtering, sorting, and specific queries like employment rates and recent companies). This change enforces a clearer separation of concerns within the application layer's SPI, impacting how company data is accessed and modified internally.

jobis-application/src/main/java/team/retum/jobis/domain/company/spi · high confidence

Introduction of common SPI interfaces for application-layer abstractions

The application layer now exposes a set of new Service Provider Interfaces (SPIs) in the \common.spi\ package to decouple core services from their implementations. These include \CachePort\ for retrieving recent company IDs, \FeignClientPort\ for external company data lookups, \PublishEventPort\ for unified event publishing, \SecurityPort\ for user and authority context management, \SendEmailPort\ for authentication code delivery, and \WriteFilePort\ for generating Excel reports for teachers. These interfaces define the contracts that the application layer uses to interact with infrastructure and domain services.

jobis-application/src/main/java/team/retum/jobis/common/spi · high confidence

Refactor student domain into granular SPI ports

The student domain's data access contracts have been refactored from a single monolithic port into specialized interfaces: CommandStudentPort and QueryStudentPort (combined in StudentPort) for general student operations, and VerifiedStudentPort for verified student records. This change introduces specific capabilities such as pessimistic locking for duplicate application prevention (getByIdWithPessimisticLock), teacher-specific student lookups (getStudentsByName returning TeacherStudentsVO), and detailed counting logic for employment status and class statistics. It also adds methods for managing verified student records (deleteByGcnAndName, existsVerifiedStudentByGcnAndName) and includes a new value object for teacher views.

jobis-application/src/main/java/team/retum/jobis/domain/student/spi · high confidence

Refactored notification domain into dedicated command and query ports

The notification domain's data access interfaces have been restructured to separate read and write operations. New dedicated ports—CommandNotificationPort, QueryNotificationPort, CommandTopicSubscriptionPort, and QueryTopicSubscriptionPort—now handle specific actions like saving notifications, subscribing/unsubscribing to topics, and querying notification lists by condition. These are consolidated into composite NotificationPort and TopicSubscriptionPort interfaces, providing a clearer, more granular contract for the application layer to interact with notification and topic subscription data.

jobis-application/src/main/java/team/retum/jobis/domain/notification/spi · high confidence

Behavioural changes

Acceptance management web endpoints now delegate to Use Cases

The AcceptanceWebAdapter has been refactored to replace direct service calls with specific Use Case classes (e.g., TeacherQueryFieldTraineesAndContractWorkersUseCase, RegisterFieldTraineeUseCase), centralizing acceptance-related logic. This change also migrates the codebase from javax to jakarta validation imports and integrates Spring Cache annotations (@Cacheable, @CacheEvict) to manage caching for acceptance, application, and company data across the new endpoints.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/acceptance/presentation · high confidence

Added banner-specific error handling

The application now includes dedicated exception handling for banner-related errors. A new BannerNotFoundException class has been introduced to manage cases where a requested banner cannot be found, utilizing a specific BannerErrorCode enum that maps to an HTTP 404 Not Found status. This allows the system to return consistent and structured error responses when banner resources are missing.

jobis-application/src/main/java/team/retum/jobis/domain/banner/exception · high confidence

Added interview persistence mappers with null-safe document number handling

New mapper classes (DocumentNumberMapper and InterviewMapper) were added to the interview persistence layer to handle conversions between domain models and database entities. The InterviewMapper now includes null-safe logic for the documentNumber field, preventing potential null pointer exceptions when mapping interview records that may not have an associated document number.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/interview/persistence/mapper · high confidence

Added notice not found exception handling

The application now includes specific error handling for missing notices. A new \NoticeNotFoundException\ class has been added to the notice domain, which utilizes a \NoticeErrorCode\ enum to return a 404 Not Found status with the message "Notice Not Found" when a requested notice cannot be located.

jobis-application/src/main/java/team/retum/jobis/domain/notice/exception · high confidence

Application domain logic refactored into use cases with pessimistic locking and new filters

The application domain logic has been restructured into specific use cases (e.g., CreateApplicationUseCase, TeacherQueryApplicationsUseCase) to handle student applications, status changes, and queries. A key behavioral change is the addition of pessimistic locking in CreateApplicationUseCase to prevent duplicate submissions. The system now supports filtering applications by winter intern status and year, and introduces new capabilities such as non-school contact pass applications, employment rate queries by year, and rejection reason attachments.

jobis-application/src/main/java/team/retum/jobis/domain/application/usecase · high confidence

Application domain model refactored with new status values and attachment support

The application submission model has been restructured to support new workflow states and file attachments. The ApplicationStatus enum now includes SEND, DOC\_FAILED, and FIELD\_TRAIN states, enabling more granular tracking of the application lifecycle. Additionally, the Application model now supports attaching documents during reapplication and allows attaching rejection reasons when an application is rejected, with dedicated model classes for application and rejection attachments.

jobis-application/src/main/java/team/retum/jobis/domain/application/model · high confidence

Application management API consolidated into ApplicationWebAdapter

The application domain's REST endpoints are now served by a single ApplicationWebAdapter controller, replacing fragmented or previous implementations. This adapter exposes endpoints for creating, deleting, and querying applications (including teacher and company views with winter intern and year filters), changing application status and field train dates, rejecting applications with optional file attachments, and retrieving employment statistics. The implementation uses Spring's caching annotations (CacheConfig, Cacheable, CacheEvict) to manage cache invalidation across application, company, and recruitment caches, and delegates logic to specific UseCase services.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/application/presentation · high confidence

Application persistence layer migrated to QueryDSL

The application persistence adapter has been rewritten to use QueryDSL instead of the previous JPA repository methods. This change introduces complex joins between application, student, recruitment, and company entities, enabling advanced filtering (such as winter intern and year filters) and efficient pagination/count queries for application lists. It also supports retrieving field trainees and passed students by company ID, replacing simpler lookup mechanisms with structured QueryDSL queries.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/application/persistence · high confidence

Application submission and status management request DTOs migrated to Jakarta validation

The request DTOs for the application domain (ChangeApplicationsStatusWebRequest, ChangeFieldTrainDateWebRequest, CreateApplicationWebRequest, CreateNonSchoolContactPassApplicationsWebRequest, and RejectApplicationWebRequest) have been updated to use Jakarta EE validation annotations (e.g., jakarta.validation.constraints.NotNull) instead of the legacy javax namespace. This change ensures consistent validation behavior for application status changes, field training date updates, new application submissions (including attachment URLs), and application rejections (including optional rejection reason and attachment files).

jobis-infrastructure/src/main/java/team/retum/jobis/domain/application/presentation/dto · high confidence

The BannerPersistenceAdapter now implements the BannerPort interface using QueryDSL (JPAQueryFactory) instead of the previous repository methods. This change introduces specific query behaviors: retrieving current banners filters by start/end dates relative to today, fetching teacher banners distinguishes between opened (active) and unopened (future) statuses, and a new method deletes expired banners where the end date is on or before the current date.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/banner/persistence · high confidence

The banner persistence layer now exposes a \detailId\ field in its query value objects (\QueryBannerVO\ and \QueryTeacherBannersVO\). This change ensures that banner retrieval operations return the associated detail identifier, enabling downstream components to link banners to their specific detail contexts.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/banner/persistence/repository/vo · high confidence

Bookmark domain interfaces refactored into separate Command and Query ports

The bookmark domain's service provider interfaces have been restructured to separate command and query operations. The main BookmarkPort now extends two new specialized interfaces: CommandBookmarkPort, which defines methods for saving and deleting bookmarks, and QueryBookmarkPort, which defines methods for checking existence, retrieving bookmarks by recruitment and student IDs, fetching student bookmarks, and retrieving bookmark user data by recruitment IDs. This change improves the clarity of the bookmark domain's API contract by explicitly distinguishing between write and read operations.

jobis-application/src/main/java/team/retum/jobis/domain/bookmark/spi, jobis-application/src/main/java/team/retum/jobis/domain/recruitment/spi · high confidence

Bookmark domain introduces specific exception handling

The bookmark domain now includes dedicated exception classes for handling bookmark-related errors, specifically when a bookmark already exists or is not found. These exceptions utilize a new error code enum to define HTTP status codes (Conflict for duplicates, Not Found for missing bookmarks) and user-facing messages, ensuring consistent error responses for bookmark operations.

jobis-application/src/main/java/team/retum/jobis/domain/bookmark/exception · high confidence

Bookmark functionality refactored into dedicated use cases

The bookmark domain logic has been restructured into specific use-case classes: BookmarkUseCase now handles toggling a recruitment bookmark for the current student, and QueryStudentBookmarksUseCase retrieves the list of bookmarks. This change replaces previous service-based or monolithic implementations with a cleaner, domain-driven approach where bookmark operations are explicitly separated into command and query responsibilities.

jobis-application/src/main/java/team/retum/jobis/domain/bookmark/usecase · high confidence

Bookmark response now includes the specific hiring job title

The student bookmarks response has been updated to include the specific job title (hiringJob) for each bookmarked recruitment. Previously, the response may have lacked this detail or used a different field; now, the \QueryStudentBookmarkResponse\ explicitly exposes the \hiringJob\ string, derived from the underlying \JobCodes\, allowing users to see exactly which role they bookmarked alongside company and status information.

jobis-application/src/main/java/team/retum/jobis/domain/bookmark/dto · high confidence

Centralized error handling for API requests and validation failures

The application now includes a global exception filter and handler to standardize error responses. The filter intercepts \JobisException\ instances and unwraps them from other exceptions, publishing events for unexpected errors and returning structured JSON error responses. Additionally, a REST controller advice handles common validation and request errors—such as missing parameters, type mismatches, constraint violations, and unsupported HTTP methods—ensuring consistent error formatting for clients.

jobis-infrastructure/src/main/java/team/retum/jobis/global/error · high confidence

Centralized utility classes for validation, logging, and image defaults

The application now provides a set of centralized utility classes in the global util package to standardize common operations. RegexProperty consolidates validation patterns for student emails, passwords, working hours, file names, general emails, and interview times, ensuring consistent input validation across the system. ImageProperty defines default paths for student profile images and company logos, allowing for easier management of static asset references. LogUtil offers a helper to convert exception stack traces to strings for improved error logging, while ExpressionUtil provides a reusable method for QueryDSL group\_concat operations, simplifying complex database queries.

jobis-infrastructure/src/main/java/team/retum/jobis/global/util · high confidence

Company domain model refactored to use records and address separation

The company domain model has been restructured to improve data integrity and clarity. Address information is now encapsulated in a dedicated \AddressInfo\ record, separating main address, detail, and zip code from the core \Company\ entity. Similarly, manager details are grouped into a \ManagerInfo\ record. The \Company\ class itself has been converted to a standard class with builder support, replacing previous implementations, and now includes a \headquarter\ boolean field to distinguish headquarters from branches. A new \CompanyType\ enum has been introduced to categorize companies as LEAD, PARTICIPATING, or MANUAL\_ADD, supporting both standard registration and manual addition by teachers.

jobis-application/src/main/java/team/retum/jobis/domain/company/model · high confidence

Company entity model updated with new fields and structure

The Company entity has been restructured to include new fields such as 'headquarter' (boolean) and 'isMou' (boolean), while removing older fields like 'branch\_exists' and 'fax\_code'. The model now uses embedded objects for 'Address' and 'Manager' details, and the 'representativePhoneNo' field has been standardized. Additionally, the entity has been migrated from javax to jakarta persistence annotations and includes updates to column definitions and default values for company logo URLs.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/persistence/entity · high confidence

Company persistence layer implementation with caching and sorting

The company persistence adapter has been implemented to handle company data access, introducing support for filtering, sorting (via CompanySortType), and pagination in company list queries. The implementation includes caching for company details retrieval and integrates with recruitment and application entities to provide enriched company views for students and teachers.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/persistence · high confidence

Company registration and management API request models updated

The presentation-layer request DTOs for company operations have been restructured to support new validation rules and fields. RegisterCompanyWebRequest and UpdateCompanyDetailsWebRequest now include fields for manager phone numbers, representative phone numbers, business area codes, service names, and a headquarter flag, with stricter validation on business numbers and email formats. A new TeacherRegisterCompanyWebRequest allows simplified company registration by teachers, while ExistsCompanyWebRequest validates business numbers for existence checks. UpdateCompanyTypeWebRequest and UpdateMouWebRequest handle bulk type and MOU updates respectively. These changes reflect a shift in how company data is collected and validated at the API boundary.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/presentation/dto · high confidence

Configured CORS policy for multiple frontend domains

The application now explicitly allows cross-origin requests from a comprehensive list of frontend domains, including production, development, staging, and local environments for admin, company, and student applications. This configuration enables browsers to successfully communicate with the backend API from these specific origins, resolving potential cross-origin errors for users accessing the various web interfaces.

jobis-infrastructure/src/main/java/team/retum/jobis/global/web · high confidence

Custom SQL logging format for P6spy

The application now uses a custom SQL log formatter that formats SQL statements based on their type (DDL vs. basic) and includes the operation time in milliseconds. This change improves the readability of database logs by presenting structured, formatted SQL queries along with performance metrics.

jobis-infrastructure/src/main/java/team/retum/jobis/global/formatter · high confidence

Database schema evolution via Flyway migrations

This update applies a series of database migrations (V2 through V46) that restructure the application's data model. Key changes include adding new tables for interviews, document numbers, interests, and view logs, while removing the previously defined view log table and re-adding it with a corrected structure. The schema also introduces new columns for application attachments, rejection attachments, and notification device tokens, alongside significant refactoring of the company, recruitment, user, and Q&A tables, such as renaming columns, adjusting data types, and modifying nullable constraints.

jobis-infrastructure/src/main/resources/db · high confidence

Domain-specific exception handling and error codes introduced

The application now uses a structured, domain-specific exception system. New exception classes and corresponding error-code enums have been added for the Bookmark, Bug, Code, Company, File, Recruitment, Review, and User domains. Each enum defines specific error scenarios (such as not found, already exists, or invalid state) mapped to appropriate HTTP status codes, enabling consistent and granular error responses for these areas.

(repo-wide) · high confidence

Enable asynchronous processing in the application entry point

The JobisApplication class now includes the @EnableAsync annotation, allowing the application to process asynchronous method calls. This change supports background task execution within the infrastructure layer, enabling non-blocking operations for features such as notifications or data synchronization without impacting the main request thread.

jobis-infrastructure/src/main/java/team/retum/jobis · high confidence

Explicit component scanning for UseCase and Service annotations

The application now explicitly configures Spring component scanning to automatically detect and register beans annotated with @UseCase, @ReadOnlyUseCase, and @Service within the team.retum.jobis package. This centralizes the discovery of business logic and service-layer components, ensuring they are available in the application context without requiring individual @Component annotations on every class.

jobis-infrastructure/src/main/java/team/retum/jobis/global/annotation/config · high confidence

Infrastructure configuration refactoring and new async support

The global configuration package has been restructured with several new configuration classes. AsyncConfig introduces dedicated thread pools for general tasks (core 2, max 5) and email sending (core 10, max 30), enabling asynchronous processing. MysqlDialectConfig registers a custom MySQL 8 dialect with a specific GROUP\_CONCAT pattern. QuerydslConfig sets up the JPA query factory. RabbitMqConfig establishes a notification exchange and queue with JSON serialization support. RedisConfig configures the Redis connection using Lettuce and sets up serialization for the Redis template.

jobis-infrastructure/src/main/java/team/retum/jobis/global/config · high confidence

Input validation added to review submission request

The CreateReviewWebRequest DTO now enforces stricter input constraints for the review submission API. Specifically, the question and answer fields are limited to 100 and 500 characters respectively via @Size annotations, and the answer field in the nested QnARequest is marked as @NotBlank. These changes ensure that user-provided text meets length and non-empty requirements before processing.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/review/presentation/dto · high confidence

Interest domain SPI interfaces refactored and split

The interest domain's service provider interface has been restructured into distinct command and query contracts. A new CommandInterestPort defines save and delete operations, while a QueryInterestPort specifies retrieval methods including getAllByStudentIdAndCodes (using codeIds), getByStudentId, and getAllByStudentIdAndCodeTypes. The main InterestPort now extends both, consolidating the access points for interest-related data operations.

jobis-application/src/main/java/team/retum/jobis/domain/interest/spi · high confidence

Interest domain exception handling and error codes

The Interest domain now includes specific exception classes and error codes to improve error reporting. A new InterestErrorCode enum defines two error scenarios: INTEREST\_NOT\_FOUND (HTTP 404) and INVALID\_CODES (HTTP 400). Corresponding exception classes, InterestNotFoundException and InvalidCodesException, have been added to handle these specific cases, allowing the application to provide more precise feedback when an interest is not found or when provided codes are invalid.

jobis-application/src/main/java/team/retum/jobis/domain/interest/exception · high confidence

Interest query API now includes student name in response

The interest query response has been updated to include the student's name alongside their list of interests. The new \StudentQueryInterestsResponse\ DTO wraps the interest data with the student's name, while \InterestResponse\ now exposes the interest keyword and code ID. Additionally, the request DTO for toggling interests (\ToggleInterestRequest\) now uses a \codeIds\ field (a list of Longs) instead of the previous parameter naming, aligning the API contract with the updated domain model.

jobis-application/src/main/java/team/retum/jobis/domain/interest/dto · high confidence

Introduce QueryDSL View Objects for Application Repository

New QueryDSL-specific Value Objects (QueryApplicationDetailVO, QueryApplicationVO, QueryApplyCompaniesVO, QueryFieldTraineesVO, QueryPassedApplicationStudentsVO) have been added to the application persistence repository layer. These classes utilize @QueryProjection to map database query results directly to structured data, supporting the retrieval of application details, student lists, and company application statuses.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/application/persistence/repository/vo · high confidence

Introduces Bug Report SPI interfaces for command and query operations

The application layer now exposes a structured Service Provider Interface (SPI) for bug reporting, separating concerns into \CommandBugReportPort\ for saving reports and \QueryBugReportPort\ for retrieving them. This includes fetching a report by ID or throwing an exception if not found, and listing reports filtered by development area, returning a value object containing the report ID, title, area, and creation timestamp.

jobis-application/src/main/java/team/retum/jobis/domain/bug/spi · high confidence

Introduction of Acceptance Domain SPI Interfaces

New SPI (Service Provider Interface) contracts have been added for the Acceptance domain, defining how the application layer interacts with persistence. This includes the main AcceptancePort interface, which aggregates CommandAcceptancePort and QueryAcceptancePort. CommandAcceptancePort exposes methods to update contract dates for specific acceptances and to save a list of acceptances. QueryAcceptancePort provides a method to retrieve acceptance details (including student name, grade, class, number, and contract date) filtered by company ID and year, returning them as AcceptanceVO value objects.

jobis-application/src/main/java/team/retum/jobis/domain/acceptance/spi, jobis-application/src/main/java/team/retum/jobis/domain/code/spi · high confidence

Introduction of AuthWebAdapter for authentication endpoints

The authentication web layer now uses a new AuthWebAdapter controller to handle requests. This adapter exposes endpoints for company sign-in, sending authentication codes, verifying codes, and reissuing tokens. It integrates with specific use cases (CompanySignInUseCase, SendAuthCodeUseCase, VerifyAuthCodeUseCase, TokenReissueUseCase) and supports platform type and device token parameters for token reissue.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/auth/presentation · high confidence

Introduction of JPA-based Application repository

The application persistence layer for the Application domain now utilizes a Spring Data JPA repository (ApplicationJpaRepository) instead of previous implementations. This change introduces standard JPA methods for finding and deleting applications by ID, along with specific queries to handle cascading deletion of application attachments and to fetch application entities with their attachments eagerly loaded.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/application/persistence/repository · high confidence

Introduction of UserPersistenceAdapter for user data access

The system now uses a new UserPersistenceAdapter to handle user-related persistence operations. This adapter implements the UserPort interface and provides methods for retrieving users by account ID, user ID, student ID, and device token, as well as checking for account existence, saving user data, and fetching device tokens associated with specific notification topics. This change centralizes user data access logic within the infrastructure layer.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/user/persistence · high confidence

Introduction of centralized global error code definitions

A new GlobalErrorCode enum has been added to the infrastructure layer to standardize error handling. This change introduces specific error codes for common scenarios such as token expiration and invalidity (returning 401 Unauthorized), internal server errors, failed message sending, mail send failures (404 Not Found), and general bad requests (400 Bad Request), providing a consistent structure for error properties across the application.

jobis-infrastructure/src/main/java/team/retum/jobis/global/error/exception · high confidence

Introduction of specific global exception classes

The application now includes dedicated exception classes for common error scenarios, including bad requests, expired or invalid tokens, and mail or message sending failures. These new classes extend the base JobisException and are mapped to specific global error codes, allowing for more precise error handling and reporting for these specific conditions.

jobis-infrastructure/src/main/java/team/retum/jobis/global/exception · high confidence

Login and device token requests converted to Java records

The application DTOs for user authentication have been refactored from standard classes to immutable Java records. Specifically, the login request now includes a device token field alongside account credentials and platform type, and a new dedicated record handles device token updates. This change simplifies the data structures for these API inputs.

jobis-application/src/main/java/team/retum/jobis/domain/user/dto · high confidence

New CompanyMapper introduced for domain-entity conversion

A new CompanyMapper component has been added to the infrastructure layer to handle the mapping between the Company domain model and the CompanyEntity. This mapper explicitly converts nested address and manager information into their respective sub-objects (AddressInfo and ManagerInfo) during domain-to-entity conversion, and reconstructs these nested structures from the entity during entity-to-domain conversion. It also maps the headquarter status and other company details, ensuring consistent data transformation between the persistence layer and the domain layer.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/persistence/mapper · high confidence

New Recruitment Web Adapter with Filtering, Caching, and Pagination

The recruitment presentation layer has been replaced by a new \RecruitmentWebAdapter\ that exposes REST endpoints for students and teachers to query, create, update, and delete recruitment postings. This change introduces granular filtering capabilities (by company name, region, status, year, winter intern status, military support, tech codes, and job codes) and pagination for student queries, alongside a dedicated count endpoint for total page calculations. Teacher-specific endpoints include unpaginated list retrieval and manual registration queries. The adapter integrates Spring Cache (\@Cacheable\, \@CacheEvict\) to optimize performance for read-heavy operations and validates inputs using Jakarta Bean Validation. It also supports exporting recruitment history to Excel.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/presentation · high confidence

New banner value objects for data transfer

Added BannerVO and TeacherBannersVO to the application layer's SPI value objects. These classes define the data structure for banner information, including fields such as id, title, content, bannerType, and detailId, with TeacherBannersVO additionally including startDate and endDate. This change supports the internal data transfer requirements for banner retrieval operations.

jobis-application/src/main/java/team/retum/jobis/domain/banner/spi/vo · high confidence

New centralized security configuration and authentication adapter

The application now uses a new \SecurityConfig\ class that explicitly defines access rules for all API endpoints, restricting access based on user roles (Student, Teacher, Company, Developer) and enabling stateless JWT authentication. A new \SecurityAdapter\ implements the \SecurityPort\ to handle user context retrieval and password encoding, while \FilterConfig\ registers the JWT and global exception filters into the Spring Security filter chain.

jobis-infrastructure/src/main/java/team/retum/jobis/global/security · high confidence

New embeddable Address and Manager value objects for company data

The company persistence layer now uses dedicated embeddable value objects to structure company-related data. A new \Address\ class encapsulates the main address, detailed address, and zip code, while a \Manager\ class manages the manager's name and phone number, including an update method. These changes replace previous flat field structures, providing a more organized domain model for company information.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/company/persistence/entity/type · high confidence

New list validation annotation and base entity with Jakarta imports

The infrastructure module introduces a new \@ValidListElements\ annotation that validates list fields, ensuring elements are non-null and optionally preventing duplicates via an \allowDuplicates\ flag. Additionally, a \BaseTimeEntity\ abstract class is added to provide automatic \createdAt\ timestamp tracking for entities. Both components have been migrated to use \jakarta.\\ imports instead of \javax.\\.

jobis-infrastructure/src/main/java/team/retum/jobis/global/annotation · high confidence

New notice detail, viewer, and attachment response DTOs

The application now exposes dedicated response structures for notice-related queries: QueryNoticeDetailResponse includes title, content, creation time, attachments, and view count; QueryNoticesResponse wraps a list of notice value objects; QueryNoticeViewersResponse lists students who viewed a notice (with ID, name, GCN, and view timestamp) via ViewerResponse; and AttachmentResponse carries attachment URL and type. These DTOs standardize the data shape returned to clients for notice listing, detail retrieval, and viewer tracking.

jobis-application/src/main/java/team/retum/jobis/domain/notice/dto/response · high confidence

Notice domain model refactored to support attachments and view logs

The notice domain model has been updated to support richer notice content and tracking. Notices now include a list of attachments, which can be either files or URLs, defined by the new AttachmentType enum. A new NoticeAttachment model represents these attachments with a URL and type. Additionally, a ViewLog model has been introduced to track when students view notices, recording the student ID, notice ID, and view timestamp. The Notice entity itself now supports updating its title and content.

jobis-application/src/main/java/team/retum/jobis/domain/notice/model · high confidence

Notification subscription error handling

The notification module now includes specific exception classes and error codes for subscription-related failures. Users will see distinct error responses when a device token is missing, or when subscribing or unsubscribing from notifications fails, rather than generic errors.

jobis-application/src/main/java/team/retum/jobis/domain/notification/exception · high confidence

Recruitment domain models refactored to support new status types and detailed hiring processes

The recruitment domain models have been updated to support a more granular hiring workflow and new recruitment statuses. A new \ProgressType\ enum defines specific stages in the hiring process (e.g., DOCUMENT, AI, CODING\_TEST, TECH\_INTERVIEW), which are now explicitly tracked in the \Recruitment\ model. The \RecruitStatus\ enum has been expanded to include \MANUAL\_ADD\ and \WIN\_INTERN\, allowing for manual registration of recruitment requests and specific internship handling. The \Recruitment\ model itself now includes fields for \hireConvertible\, \winterIntern\, \integrationPlan\, and \flexibleWorking\, reflecting changes in recruitment requirements and benefits. Additionally, the \RecruitArea\ model has been refined to handle job and tech codes more effectively, and the \Salary\ model is now a record separating training pay and regular pay. These changes enable more detailed configuration of recruitment requests and better tracking of the application process.

jobis-application/src/main/java/team/retum/jobis/domain/recruitment/model · high confidence

Recruitment entity model refactored with new fields and JPA migration

The recruitment persistence layer has been restructured by migrating from javax to jakarta.persistence annotations and reorganizing the entity package structure. The RecruitmentEntity now includes new fields for flexible working (flexibleWorking), winter internships (winterIntern), hire convertibility (hireConvertible), and employment integration plans (integrationPlan), while renaming additionalQualifications to replace the previous required\_grade concept. The RecruitAreaEntity was introduced to manage recruitment areas with a one-to-many relationship to RecruitAreaCodeEntity, featuring updated column definitions for major tasks and hired counts.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/persistence/entity · high confidence

Recruitment management logic refactored into dedicated use cases and a permission checker

The recruitment domain logic in the application layer has been restructured into specific use cases (such as ApplyRecruitmentUseCase, QueryRecruitmentsUseCase, and TeacherQueryRecruitmentsUseCase) and a new RecruitmentChecker. This change centralizes permission validation for companies and teachers, introduces event publishing for status changes and winter intern registrations, and supports new filtering capabilities like military support and region-based searches for students.

jobis-application/src/main/java/team/retum/jobis/domain/recruitment/usecase · high confidence

Recruitment persistence layer refactored with new QueryDSL adapters

The persistence implementation for the recruitment domain has been replaced with new QueryDSL-based adapters. RecruitAreaPersistenceAdapter and RecruitmentPersistenceAdapter now handle data access using JPAQueryFactory, introducing complex joins, grouping, and filtering logic for student and teacher recruitment views. This change shifts the data retrieval mechanism from the previous implementation to a more explicit QueryDSL structure, affecting how recruitment data is queried and mapped to domain models.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/persistence · medium confidence

Recruitment request DTOs migrated to Jakarta validation and updated field structure

The presentation-layer DTOs for creating, updating, and managing recruitment statuses have been replaced with new implementations that use \jakarta.validation\ annotations instead of the legacy \javax\ package. These DTOs now enforce stricter validation rules, including specific regex checks for working hours when flexible working is disabled, maximum size limits on text fields like \additionalQualifications\ and \benefits\, and mandatory fields such as \trainPay\ and \submitDocument\. The data model has also evolved to include new fields such as \flexibleWorking\, \hireConvertible\, \integrationPlan\, and \winterIntern\, while renaming others like \required\_grade\ to \additionalQualifications\ and \military\ to \militarySupport\ to better reflect the recruitment criteria.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/recruitment/presentation/dto · high confidence

Recruitment request DTOs updated with new fields and enums

The recruitment request DTOs have been updated to support new recruitment criteria and sorting options. ApplyRecruitmentRequest and UpdateRecruitmentRequest now include fields for flexible working (flexibleWorking), military support (militarySupport), hire convertibility (hireConvertible), integration plans (integrationPlan), additional qualifications (additionalQualifications), and working hours (workingHours). A new RecruitRegion enum defines available regions (Seoul, Daejeon, Gyeonggi, Others), and RecruitSortType provides sorting options for recruitment listings. CreateRecruitAreaRequest remains focused on area-specific details like job codes and hiring counts.

jobis-application/src/main/java/team/retum/jobis/domain/recruitment/dto/request · high confidence

Recruitment response DTOs refactored and expanded

The recruitment response DTOs in the application layer have been restructured to expose more detailed and role-specific data. New or updated responses include \QueryRecruitmentDetailResponse\ (adding fields like \hireConvertible\, \winterIntern\, \integrationPlan\, and bookmark/application status), \QueryMyRecruitmentResponse\ (for student self-service views), and \StudentQueryRecruitmentsResponse\ (hiding salary details for students). Teacher-facing responses (\TeacherQueryRecruitmentsResponse\, \TeacherQueryManualRecruitmentsResponse\) now include application counts and company types. Additional responses like \RecruitmentCountResponse\, \RecruitmentExistsResponse\, and \ExportRecruitmentHistoryResponse\ support new listing, filtering, and export capabilities.

jobis-application/src/main/java/team/retum/jobis/domain/recruitment/dto/response · high confidence

Refactored bookmark query value objects to use inheritance

The bookmark persistence layer now uses dedicated QueryDSL value objects (QueryBookmarkUserVO, QueryStudentBookmarksVO) that extend their respective domain VO counterparts. This change introduces inheritance for query projections, ensuring that the data returned from bookmark queries (including student bookmarks with company logo URLs and recruitment status) is properly mapped via QueryProjection constructors while maintaining the structure of the underlying domain value objects.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/bookmark/persistence/repository/vo · high confidence

Refactored bookmark response data structures

The bookmark domain's value objects have been restructured to provide more specific and detailed data for users. A new BookmarkUserVO was introduced to handle user-specific bookmark associations, while StudentBookmarksVO was updated to include additional fields such as company logo URL, recruitment status, job codes, and military support information, enhancing the detail returned in bookmark-related responses.

jobis-application/src/main/java/team/retum/jobis/domain/bookmark/spi/vo · high confidence

Review API endpoints and caching behavior

The ReviewWebAdapter now exposes endpoints for creating, deleting, and querying reviews, including a new endpoint to retrieve the total page count for review listings. Querying reviews supports filtering by type, location, company, keyword, years, and code, with pagination. A new endpoint allows users to retrieve their own review history. Caching is applied to review queries (with a condition limiting cache to the first 5 pages) and invalidated upon creation or deletion of a review.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/review/presentation · high confidence

Review API response structures refactored and expanded

The review API response DTOs have been restructured to provide more detailed and consistent data to clients. The list review endpoint now includes company logo URLs in its responses. A new dedicated response type for querying a user's own reviews has been introduced. The detail review endpoint has been expanded to include specific question and answer fields alongside the list of Q&A pairs, and the time field is now explicitly typed as LocalDate. Additionally, a new response structure for querying review questions has been added, and a new QnA response DTO has been created to handle Q&A data separately.

jobis-application/src/main/java/team/retum/jobis/domain/review/dto/response · high confidence

Review domain ports restructured with dedicated command and query interfaces

The review application layer now uses a split port architecture: \CommandReviewPort\ handles write operations (saving reviews, bulk-saving Q&A items, and deleting reviews), while \QueryReviewPort\ exposes read capabilities including filtering, pagination, detail retrieval, and the user's own review list. A new \CommandQuestionPort\ and \QueryQuestionPort\ manage question persistence and listing, and \ReviewPort\ unifies the command and query interfaces. This change refactors how the application layer interacts with review and question data, enabling clearer separation of concerns for review creation, Q&A association, and review retrieval.

jobis-application/src/main/java/team/retum/jobis/domain/review/spi · high confidence

Review entity model refactored to support Q&A structure

The review persistence layer has been restructured to support a dedicated Q&A model. New entities, QuestionEntity and QnAEntity, have been introduced to manage questions and answers separately, linked to the ReviewEntity. The ReviewEntity itself has been updated to include a one-to-many relationship with QnAEntity and now stores specific question and answer text fields directly, replacing the previous flat structure. This change also includes a migration from javax to jakarta persistence annotations.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/review/persistence/entity · high confidence

Review list and detail responses now include company logo and use LocalDate for dates

The review list API response now includes the company logo URL, and the review detail API now exposes the interview date as a LocalDate instead of a LocalDateTime. These changes are implemented via new QueryDSL value objects (QueryReviewVO, QueryReviewDetailVO, etc.) that map database results to the domain view objects, ensuring the API surface reflects the updated data structure.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/review/persistence/repository/vo · high confidence

Review model expanded with interview details and Q&A support

The Review domain model has been redesigned to capture richer interview context. New enums InterviewType (Individual, Group, Other) and InterviewLocation (Daejeon, Seoul, Gyeonggi, Other) allow reviews to specify the interview format and location. The Review entity now includes fields for interviewType, interviewLocation, interviewerCount, and a list of QnA entries, while also retaining direct question and answer strings for simpler cases. New model classes Question and QnA support structured Q&A data linked to reviews.

jobis-application/src/main/java/team/retum/jobis/domain/review/model · high confidence

Review value objects restructured with new fields and types

The review domain's value objects have been redefined to support updated API responses. ReviewVO now includes a companyLogoUrl and uses LocalDate for the time field. ReviewDetailVO has been expanded to include interviewerCount, question, answer, and specific interview type/location enums. New value objects MyReviewVO and QnAVO have been introduced to support the 'my reviews' list and Q&A structure respectively.

jobis-application/src/main/java/team/retum/jobis/domain/review/spi/vo · high confidence

Structured environment configuration and SQL logging support

The application now uses a structured Spring Boot profile system with dedicated configuration files for local, development, and production environments, centralizing settings for the MySQL datasource, Redis, JPA, and external services like RabbitMQ and AWS S3. The local profile is configured to use P6Spy for SQL query logging, supported by a new spy.properties file, while the main application.yml defines default behaviors such as graceful shutdown, Jackson snake\_case naming, and Flyway migration settings.

jobis-infrastructure/src/main/resources · high confidence

Structured exception handling for Feign client errors

The infrastructure layer now introduces specific exception classes (FeignBadRequestException, FeignServerErrorException, FeignUnauthorisedException) and a corresponding error code enum (FeignErrorCode) to handle errors originating from Feign HTTP clients. This change allows the application to distinguish between bad requests, unauthorized access, and server errors returned by third-party APIs, mapping them to standard HTTP status codes for consistent error reporting.

jobis-infrastructure/src/main/java/team/retum/jobis/thirdparty/api/exception · high confidence

Student account management request DTOs migrated to Jakarta validation

The presentation-layer request DTOs for student operations—specifically StudentSignUpWebRequest, UpdateForgottenPasswordWebRequest, UpdatePasswordWebRequest, and UpdateStudentProfileWebRequest—have been introduced or updated to use Jakarta EE validation annotations (jakarta.validation) instead of the legacy javax.validation. This change aligns the student signup and profile update workflows with the platform's broader migration to the Jakarta namespace, ensuring consistent validation behavior for fields such as email, password, and profile image URL.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/student/presentation/dto · high confidence

Student persistence layer refactored with pessimistic locking and new teacher query capabilities

The student persistence infrastructure has been restructured to introduce a new \StudentPersistenceAdapter\ that implements \StudentPort\, replacing or augmenting previous implementations. This adapter now supports pessimistic locking (\getByIdWithPessimisticLock\) to prevent duplicate submissions during student lookups, a feature explicitly noted in commit \#1099. Additionally, it introduces new query methods to support teacher-facing student lookups (\getStudentsByName\, \getStudentsByGradeAndClassRoomAndNumberAndEntranceYearOrThrow\) and employment statistics (\getCountByApplicationStatusAndYear\, \getTotalStudentsByClassNumber\, \getPassedStudentsByClassNumber\), including logic to handle winter intern exclusions and year-based entrance calculations. A separate \VerifiedStudentPersistenceAdapter\ handles verified student deletion and existence checks by GCN and name, while a new \QueryTeacherStudentsVO\ value object supports the teacher student query projections.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/student/persistence · high confidence

Unified event publishing via PublishEventPort

The event infrastructure now provides a unified interface for publishing events through the new PublishEventPort. Two implementations are introduced: EventPublisher, which delegates to Spring's ApplicationEventPublisher for local in-process events, and RabbitMqProducer, which sends events to a RabbitMQ exchange named 'notification\_exchange' with the routing key 'notification.event'. This allows the application to publish events either locally or via message queue using a consistent API.

jobis-infrastructure/src/main/java/team/retum/jobis/event · high confidence

User domain SPIs refactored into separate command and query interfaces

The user domain's service provider interfaces have been restructured to separate write and read operations. A new \CommandUserPort\ interface now exclusively defines the \save\ method for user creation, while \QueryUserPort\ consolidates all retrieval logic, including methods for fetching users by ID, account ID, or student ID, checking existence, and retrieving device tokens for notification topics. The existing \UserPort\ now extends both of these new interfaces, maintaining the same public contract but with a cleaner internal separation of concerns.

jobis-application/src/main/java/team/retum/jobis/domain/user/spi · high confidence

User persistence entity migrated to Jakarta EE and simplified

The UserEntity class has been updated to use the Jakarta EE namespace (jakarta.persistence) instead of the legacy javax.persistence, aligning with the platform's migration. The entity structure has been streamlined: the 'authCode' field has been removed, and the 'token' field is now a standard VARCHAR(255) column. Additionally, the entity no longer includes fields or methods related to subscription status, focusing solely on core user identification, credentials, and authority.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/user/persistence/entity · high confidence

Test coverage

Added test infrastructure for integration tests using Testcontainers

Added test configuration files to support integration testing with a MySQL 8.0.35 database running via Testcontainers. This includes a base \IntegrationTest\ class that dynamically configures Spring properties (such as datasource URLs and JPA settings) to point to the container, a \TestContainerConfig\ class to manage the MySQL container lifecycle, and a test-specific application properties file.

jobis-infrastructure/src/test · high confidence

Housekeeping

Placeholder created for notification DTOs

A .gitkeep file was added to the notification presentation DTO directory to ensure the folder structure is preserved in version control, serving as a placeholder for future data transfer object implementations.

jobis-infrastructure/src/main/java/team/retum/jobis/domain/notification/presentation/dto · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 50.

Lenses

  • Code Health 99
  • Architecture 92
  • Maturity 42
  • Readiness 59
  • Security 49
  • Domain Modelling 54

Changes since last survey

  • 300 commits — 299 feature/other, 1 fixes

By area

  • jobis-infrastructure/src — 127 commits
  • (repo) — 91 commits
  • jobis-application/src — 70 commits
  • (root) — 6 commits
  • .github/workflows — 6 commits

Notable commits

  • fix: Merge branch 'develop' into fix/918-update-authority-set
  • change: Merge branch 'develop' into feat/1080-send-interview-notification
  • change: Merge remote-tracking branch 'origin/feat/1120-add-exception' into feat/1120-add-exception
  • change: feat :: (#1118) CORS 허용 도메인 추가
  • change: ♻️ :: (#1109) CD 워크플로우 수정
  • change: ✨ :: (#1001) 쿼리 성능 개선
  • change: ✨ :: (#1001) 회사 상태 변경 기능 추가
  • change: ✨ :: (#1002) 리뷰 상세 조회 api 추가
  • change: ✨ :: (#1014) 면접 후기 리스트 조회 response에 회사 로고 이미지 추가
  • change: ✨ :: (#1018) 기본 생성자 추가
  • change: ✨ :: (#1018) 리뷰 검색 기능 추가
  • change: ✨ :: (#1020) 서류 탈락 상태 추가
  • change: ✨ :: (#1029) 내 리뷰 후기 리스트 조회 API
  • change: ✨ :: (#1033) CORS 요청 경로 허용
  • change: ✨ :: (#1036) 에러 확인용 로그 추가
  • change: ✨ :: (#1039) 파일 경로 -> json 방식으로 변경
  • change: ✨ :: (#1044) 테스트 컨테이너 초기 세팅
  • change: ✨ :: (#1049) 최신순 정렬 조건 추가
  • change: ✨ :: (#1049) 취업률 년도별 조회기능 추가
  • change: ✨ :: (#1053) 겨울인턴 상태 추가
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Team-return/JOBIS-DSM-BE was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit aa04e7b4e319febcd66af00610caded999e5f7a2 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.