Skip to content

Latest commit

 

History

History
90 lines (68 loc) · 4.15 KB

File metadata and controls

90 lines (68 loc) · 4.15 KB

MANNALGA

On hobbies and club services at Mannalga,
Register your interests and join the meeting!

1 2
3 4

Live Server

Main Stack

  • Kotlin 1.4
  • Spring boot
  • MySQL

Server Architecture

MANNALGA arch

Installation and Getting Started

Setting MySQL DB And Schema

The MySQL database can create a schema by running src/course/sql/ddl.sql attached inside the project.
If the DB schema setting is complete, enter the settings of the DB you set in the application.properties file.

Start Service

Mannalga software has backend and frontend separation.
You can run the service by running the Front client after you run the Backend API server.

Project Features

CI/CD with Github Action

All Pull Requests generated by developers automatically perform build/testing to check if they can be run normally. This eliminates the need to consider whether this code is executable when conducting code reviews for Pull Requests.

The Mannalga project has built, tested, and deployed pipelines all going through Github Action. We have created two versions of the action so that we can deploy both the .jar file and the container environment, which can be seen here.

Code-Review Driven Development

Development features will not be merge without code review. Through this, we were able to improve the quality of the code and understand the behavior of the code written by the team members.

Test code based API Document

Communicating APIs with front-end developers was not easy. The API's call conditions, permissions, parameters, return values, etc. had to be clearly communicated, and managing them was almost impossible without documentation. So we documented all the behavior of the API through Restdocs. Front-end developers no longer need to ask back-end developers what this API does.

The result of this code's operation will generate the following documents.

result.andExpect(status().isOk)
    .andDo(
        document("club-withdraw",
            getDocumentRequest(),
            getDocumentResponse(),
            pathParameters(parameterWithName("clubSeq").description("모임 시퀀스.")),
            responseFields(
                *commonResponseField()
            )
        )
    )

image

Type-Safe JPQL via using QueryDSL

@Transactional
override fun findMeetingApplicationByUserAndMeetingSeq(clubUserParam: ClubUser, meetingSeq: Long): MeetingApplication {
    return from(meetingApplication)
        .join(meetingApplication.meeting, meeting)
        .join(meetingApplication.clubUser, clubUser)
        .join(meeting.club, club)
        .where(
            clubUser.seq.eq(clubUserParam.seq), meeting.seq.eq(meetingSeq)
        ).fetchOne()
}

Additional Information

Database ERD

diagram

Entity Relationship Diagram

entityManagerFactory(EntityManagerFactoryBuilder)