├── .editorconfig
├── .github
├── ISSUE_TEMPLATE
│ ├── BUG_REPORT.md
│ ├── FEATURE.md
│ └── NEW_FEATURE.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── README.md
├── flyway.example.properties
├── pom.xml
└── src
└── main
├── java
└── koreatech
│ └── in
│ ├── annotation
│ ├── ApiOff.java
│ ├── Auth.java
│ ├── AuthExcept.java
│ ├── AuthTemporary.java
│ ├── Login.java
│ ├── OwnerRegistrationInfomation.java
│ ├── ParamValid.java
│ ├── ValidationGroups.java
│ └── XssFilter.java
│ ├── aop
│ ├── SlackCrash.java
│ ├── ValidParameters.java
│ └── XssPrevent.java
│ ├── argumentresolver
│ └── UserArgumentResolver.java
│ ├── config
│ └── WebConfig.java
│ ├── controller
│ ├── ActivityController.java
│ ├── BusController.java
│ ├── CalendarController.java
│ ├── CallvanController.java
│ ├── CircleController.java
│ ├── CommunityController.java
│ ├── DeptController.java
│ ├── DiningController.java
│ ├── EventController.java
│ ├── FaqController.java
│ ├── GlobalExceptionHandler.java
│ ├── KakaoBotController.java
│ ├── LandController.java
│ ├── LostAndFoundController.java
│ ├── MarketPlaceController.java
│ ├── MemberController.java
│ ├── OwnerController.java
│ ├── OwnerShopController.java
│ ├── PageResourceController.java
│ ├── SampleController.java
│ ├── SearchController.java
│ ├── ShopController.java
│ ├── SlackBotController.java
│ ├── TemporaryCommunityController.java
│ ├── TimeTableController.java
│ ├── TrackController.java
│ ├── UploadController.java
│ ├── UserController.java
│ ├── VersionController.java
│ └── admin
│ │ ├── AdminActivityController.java
│ │ ├── AdminCalendarController.java
│ │ ├── AdminCallvanController.java
│ │ ├── AdminCircleController.java
│ │ ├── AdminCommunityController.java
│ │ ├── AdminFaqController.java
│ │ ├── AdminLandController.java
│ │ ├── AdminLostAndFoundController.java
│ │ ├── AdminMarketPlaceController.java
│ │ ├── AdminMemberController.java
│ │ ├── AdminPageResourceController.java
│ │ ├── AdminShopController.java
│ │ ├── AdminTrackController.java
│ │ ├── AdminUserController.java
│ │ └── AdminVersionController.java
│ ├── converter
│ └── DomainEnumConvertor.java
│ ├── domain
│ ├── Auth
│ │ ├── JWTKeys.java
│ │ ├── LoginResult.java
│ │ ├── RefreshResult.java
│ │ └── RefreshToken.java
│ ├── Authority.java
│ ├── BeanSerializer.java
│ ├── BokDuck
│ │ ├── Land.java
│ │ ├── LandComment.java
│ │ └── LandResponseType.java
│ ├── Bus
│ │ ├── Bus.java
│ │ ├── BusNodeEnum.java
│ │ ├── BusRemainTime.java
│ │ ├── BusTerminalEnum.java
│ │ ├── BusTimetable.java
│ │ ├── BusTypeEnum.java
│ │ ├── CityBus.java
│ │ ├── CityBusArrivalInfo.java
│ │ ├── CommutingBus.java
│ │ ├── IntercityBus.java
│ │ ├── IntercityBusArrivalInfo.java
│ │ ├── IntercityBusTimetable.java
│ │ ├── MajorStationEnum.java
│ │ ├── RegionEnum.java
│ │ ├── SchoolBus.java
│ │ ├── SchoolBusArrivalInfo.java
│ │ ├── SchoolBusCourse.java
│ │ ├── SchoolBusTimetable.java
│ │ ├── ShuttleBus.java
│ │ └── SingleBusTime.java
│ ├── Callvan
│ │ ├── CallvanResponseType.java
│ │ ├── Company.java
│ │ ├── Participant.java
│ │ └── Room.java
│ ├── Circle
│ │ ├── Circle.java
│ │ └── CircleResponseType.java
│ ├── Community
│ │ ├── Article.java
│ │ ├── ArticleResponseType.java
│ │ ├── ArticleViewLog.java
│ │ ├── Board.java
│ │ ├── BoardResponseType.java
│ │ ├── Comment.java
│ │ ├── CommentResponseType.java
│ │ └── CommunityResponseType.java
│ ├── Criteria
│ │ ├── Criteria.java
│ │ ├── SearchCriteria.java
│ │ └── StudentCriteria.java
│ ├── Dept
│ │ ├── DeptInfoVO.java
│ │ ├── DeptInfoWithNum.java
│ │ └── DeptNum.java
│ ├── Dining
│ │ ├── DiningMenu.java
│ │ ├── DiningMenuDTO.java
│ │ └── DiningTimeEnum.java
│ ├── DomainToMap.java
│ ├── ErrorMessage.java
│ ├── Event
│ │ ├── EventArticle.java
│ │ ├── EventArticleViewLog.java
│ │ ├── EventComment.java
│ │ └── ShopAdmin.java
│ ├── Faq
│ │ ├── Faq.java
│ │ └── FaqResponseType.java
│ ├── Global
│ │ └── UpdatedAt.java
│ ├── Homepage
│ │ ├── Activity.java
│ │ ├── Member.java
│ │ ├── TechStack.java
│ │ └── Track.java
│ ├── LostAndFound
│ │ ├── LostItem.java
│ │ ├── LostItemComment.java
│ │ ├── LostItemCommentResponseType.java
│ │ ├── LostItemResponseType.java
│ │ └── LostItemViewLog.java
│ ├── Mail
│ │ ├── Mail.java
│ │ └── MailForm.java
│ ├── MarketPlace
│ │ ├── Item.java
│ │ ├── ItemComment.java
│ │ ├── ItemCommentResponseType.java
│ │ ├── ItemResponseType.java
│ │ └── ItemViewLog.java
│ ├── NotiSlack.java
│ ├── Notice.java
│ ├── PageResource
│ │ └── PageResource.java
│ ├── RedisOwnerKeyPrefix.java
│ ├── Search
│ │ ├── SearchArticles.java
│ │ ├── SearchArticlesMinified.java
│ │ ├── SearchComments.java
│ │ ├── SearchCommentsMinified.java
│ │ └── SearchEnum.java
│ ├── Shop
│ │ ├── Menu.java
│ │ ├── Shop.java
│ │ ├── ShopCategory.java
│ │ ├── ShopCategoryMap.java
│ │ ├── ShopImage.java
│ │ ├── ShopMenu.java
│ │ ├── ShopMenuCategory.java
│ │ ├── ShopMenuCategoryMap.java
│ │ ├── ShopMenuDetail.java
│ │ ├── ShopMenuImage.java
│ │ ├── ShopMenuProfile.java
│ │ ├── ShopOpen.java
│ │ ├── ShopProfile.java
│ │ ├── ShopResponseType.java
│ │ └── ShopViewLog.java
│ ├── TemporaryCommunity
│ │ ├── TempArticle.java
│ │ ├── TempArticleResponseType.java
│ │ ├── TempComment.java
│ │ ├── TempCommentResponseType.java
│ │ └── TempCommunityResponseType.java
│ ├── TimeTable
│ │ ├── Lecture.java
│ │ ├── Semester.java
│ │ └── TimeTable.java
│ ├── Upload
│ │ ├── ByteSize.java
│ │ ├── ContentType.java
│ │ ├── ContentTypes.java
│ │ ├── DomainEnum.java
│ │ ├── FileExtensionName.java
│ │ ├── PreSignedUrlResult.java
│ │ ├── UploadFile.java
│ │ ├── UploadFileFullName.java
│ │ ├── UploadFileFullPath.java
│ │ ├── UploadFileLocation.java
│ │ ├── UploadFileMetaData.java
│ │ ├── UploadFiles.java
│ │ └── UploadFilesLocation.java
│ ├── User
│ │ ├── AuthResult.java
│ │ ├── AuthToken.java
│ │ ├── Domain.java
│ │ ├── EmailAddress.java
│ │ ├── LocalParts.java
│ │ ├── PageInfo.java
│ │ ├── User.java
│ │ ├── UserCode.java
│ │ ├── UserResponseType.java
│ │ ├── UserType.java
│ │ ├── Users.java
│ │ ├── owner
│ │ │ ├── CertificationCode.java
│ │ │ ├── Owner.java
│ │ │ ├── OwnerAttachment.java
│ │ │ ├── OwnerAttachments.java
│ │ │ ├── OwnerInCertification.java
│ │ │ ├── OwnerInVerification.java
│ │ │ ├── OwnerIncludingShop.java
│ │ │ ├── OwnerPartition.java
│ │ │ └── OwnerShop.java
│ │ └── student
│ │ │ └── Student.java
│ ├── Version
│ │ ├── BatchVersion.java
│ │ ├── Version.java
│ │ └── VersionTypeEnum.java
│ └── kut
│ │ └── Calendar.java
│ ├── dto
│ ├── EmptyResponse.java
│ ├── ExceptionResponse.java
│ ├── RequestDataInvalidResponse.java
│ ├── admin
│ │ ├── auth
│ │ │ ├── TokenRefreshRequest.java
│ │ │ └── TokenRefreshResponse.java
│ │ ├── land
│ │ │ ├── request
│ │ │ │ ├── CreateLandRequest.java
│ │ │ │ ├── LandsCondition.java
│ │ │ │ └── UpdateLandRequest.java
│ │ │ └── response
│ │ │ │ ├── LandResponse.java
│ │ │ │ └── LandsResponse.java
│ │ ├── member
│ │ │ ├── request
│ │ │ │ ├── CreateMemberRequest.java
│ │ │ │ ├── MembersCondition.java
│ │ │ │ └── UpdateMemberRequest.java
│ │ │ └── response
│ │ │ │ ├── MemberResponse.java
│ │ │ │ └── MembersResponse.java
│ │ ├── shop
│ │ │ ├── request
│ │ │ │ ├── CreateShopCategoryRequest.java
│ │ │ │ ├── CreateShopMenuCategoryRequest.java
│ │ │ │ ├── CreateShopMenuRequest.java
│ │ │ │ ├── CreateShopRequest.java
│ │ │ │ ├── ShopCategoriesCondition.java
│ │ │ │ ├── ShopsCondition.java
│ │ │ │ ├── UpdateShopCategoryRequest.java
│ │ │ │ ├── UpdateShopMenuCategoryRequest.java
│ │ │ │ ├── UpdateShopMenuRequest.java
│ │ │ │ └── UpdateShopRequest.java
│ │ │ └── response
│ │ │ │ ├── AllMenuCategoriesOfShopResponse.java
│ │ │ │ ├── AllMenusOfShopResponse.java
│ │ │ │ ├── ShopCategoriesResponse.java
│ │ │ │ ├── ShopCategoryResponse.java
│ │ │ │ ├── ShopMenuResponse.java
│ │ │ │ ├── ShopResponse.java
│ │ │ │ └── ShopsResponse.java
│ │ └── user
│ │ │ ├── owner
│ │ │ ├── request
│ │ │ │ └── OwnerUpdateRequest.java
│ │ │ └── response
│ │ │ │ ├── OwnerUpdateResponse.java
│ │ │ │ └── OwnersResponse.java
│ │ │ ├── request
│ │ │ ├── LoginRequest.java
│ │ │ ├── NewOwnersCondition.java
│ │ │ ├── OwnersCondition.java
│ │ │ └── UserUpdateRequest.java
│ │ │ ├── response
│ │ │ ├── LoginResponse.java
│ │ │ ├── NewOwnersResponse.java
│ │ │ ├── OwnerResponse.java
│ │ │ ├── UserResponse.java
│ │ │ └── UserUpdateResponse.java
│ │ │ └── student
│ │ │ ├── request
│ │ │ └── StudentUpdateRequest.java
│ │ │ └── response
│ │ │ ├── StudentResponse.java
│ │ │ ├── StudentUpdateResponse.java
│ │ │ └── StudentsResponse.java
│ ├── global
│ │ └── AttachmentUrlRequest.java
│ └── normal
│ │ ├── auth
│ │ ├── TokenRefreshRequest.java
│ │ └── TokenRefreshResponse.java
│ │ ├── bus
│ │ └── BusTimetableResponse.java
│ │ ├── mail
│ │ └── Mail.java
│ │ ├── shop
│ │ ├── request
│ │ │ ├── CreateMenuCategoryRequest.java
│ │ │ ├── CreateMenuRequest.java
│ │ │ ├── CreateShopRequest.java
│ │ │ ├── UpdateMenuCategoryRequest.java
│ │ │ ├── UpdateMenuRequest.java
│ │ │ └── UpdateShopRequest.java
│ │ └── response
│ │ │ ├── AllMenuCategoriesOfShopResponse.java
│ │ │ ├── AllMenusOfShopResponse.java
│ │ │ ├── AllShopCategoriesResponse.java
│ │ │ ├── AllShopsOfOwnerResponse.java
│ │ │ ├── AllShopsResponse.java
│ │ │ ├── MenuResponse.java
│ │ │ └── ShopResponse.java
│ │ ├── upload
│ │ ├── request
│ │ │ ├── PreSignedUrlRequest.java
│ │ │ ├── UploadFileRequest.java
│ │ │ └── UploadFilesRequest.java
│ │ └── response
│ │ │ ├── PreSignedUrlResponse.java
│ │ │ ├── UploadFileResponse.java
│ │ │ └── UploadFilesResponse.java
│ │ └── user
│ │ ├── owner
│ │ ├── request
│ │ │ ├── OwnerChangePasswordRequest.java
│ │ │ ├── OwnerRegisterRequest.java
│ │ │ ├── OwnerUpdateRequest.java
│ │ │ ├── VerifyCodeRequest.java
│ │ │ └── VerifyEmailRequest.java
│ │ └── response
│ │ │ ├── OwnerResponse.java
│ │ │ └── VerifyCodeResponse.java
│ │ ├── request
│ │ ├── AuthTokenRequest.java
│ │ ├── CheckExistsEmailRequest.java
│ │ ├── FindPasswordRequest.java
│ │ ├── LoginRequest.java
│ │ ├── UpdateUserRequest.java
│ │ ├── UserRegisterRequest.java
│ │ └── UserUpdateRequest.java
│ │ ├── response
│ │ ├── AuthResponse.java
│ │ ├── LoginResponse.java
│ │ ├── UserResponse.java
│ │ └── UsersResponse.java
│ │ └── student
│ │ ├── request
│ │ ├── StudentRegisterRequest.java
│ │ └── StudentUpdateRequest.java
│ │ └── response
│ │ └── StudentResponse.java
│ ├── exception
│ ├── BadRequestException.java
│ ├── BaseException.java
│ ├── ConflictException.java
│ ├── ExceptionInformation.java
│ ├── ForbiddenException.java
│ ├── NotFoundException.java
│ ├── ParentException.java
│ ├── PreconditionFailedException.java
│ ├── RequestDataInvalidException.java
│ ├── UnauthorizeException.java
│ └── ValidationException.java
│ ├── interceptor
│ └── AuthInterceptor.java
│ ├── mapstruct
│ ├── OwnerConverter.java
│ ├── UserConverter.java
│ ├── admin
│ │ ├── auto
│ │ │ └── AuthConverter.java
│ │ ├── land
│ │ │ └── AdminLandConverter.java
│ │ ├── member
│ │ │ └── AdminMemberConverter.java
│ │ ├── shop
│ │ │ ├── AdminShopCategoryConverter.java
│ │ │ ├── AdminShopConverter.java
│ │ │ ├── AdminShopMenuConverter.java
│ │ │ └── AdminShopOpenConverter.java
│ │ └── user
│ │ │ ├── OwnerConverter.java
│ │ │ ├── StudentConverter.java
│ │ │ └── UserConverter.java
│ └── normal
│ │ ├── auto
│ │ └── AuthConverter.java
│ │ ├── bus
│ │ ├── IntercityBusTimetableConverter.java
│ │ └── SchoolBusCourseConverter.java
│ │ ├── dining
│ │ └── DiningMenuConverter.java
│ │ ├── shop
│ │ ├── ShopConverter.java
│ │ ├── ShopMenuConverter.java
│ │ └── ShopOpenConverter.java
│ │ └── upload
│ │ └── UploadFileConverter.java
│ ├── repository
│ ├── ActivityMapper.java
│ ├── AuthenticationMapper.java
│ ├── AuthorityMapper.java
│ ├── BusRepository.java
│ ├── CalendarMapper.java
│ ├── CallvanMapper.java
│ ├── CircleMapper.java
│ ├── CommunityMapper.java
│ ├── DeptMapper.java
│ ├── DiningMapper.java
│ ├── EventMapper.java
│ ├── FaqMapper.java
│ ├── LandMapper.java
│ ├── LostAndFoundMapper.java
│ ├── MarketPlaceMapper.java
│ ├── MemberMapper.java
│ ├── PageResourceMapper.java
│ ├── RedisAuthenticationMapper.java
│ ├── RedisOwnerMapper.java
│ ├── SearchMapper.java
│ ├── ShopMapper.java
│ ├── TemporaryCommunityMapper.java
│ ├── TimeTableMapper.java
│ ├── TrackMapper.java
│ ├── VersionMapper.java
│ ├── admin
│ │ ├── AdminShopMapper.java
│ │ └── AdminUserMapper.java
│ └── user
│ │ ├── OwnerMapper.java
│ │ ├── StudentMapper.java
│ │ └── UserMapper.java
│ ├── schedule
│ ├── BusTago.java
│ └── CachedHotArticles.java
│ ├── service
│ ├── AbstractJwtValidator.java
│ ├── AccessJwtValidator.java
│ ├── ActivityService.java
│ ├── ActivityServiceImpl.java
│ ├── BusService.java
│ ├── BusServiceImpl.java
│ ├── CalendarService.java
│ ├── CalendarServiceImpl.java
│ ├── CallvanService.java
│ ├── CallvanServiceImpl.java
│ ├── CircleService.java
│ ├── CircleServiceImpl.java
│ ├── CommunityService.java
│ ├── CommunityServiceImpl.java
│ ├── DeptService.java
│ ├── DeptServiceImpl.java
│ ├── DiningService.java
│ ├── DiningServiceImpl.java
│ ├── EventService.java
│ ├── EventServiceImpl.java
│ ├── FaqService.java
│ ├── FaqServiceImpl.java
│ ├── JwtGenerator.java
│ ├── JwtValidator.java
│ ├── KakaoBotService.java
│ ├── KakaoBotServiceImpl.java
│ ├── LandService.java
│ ├── LandServiceImpl.java
│ ├── LostAndFoundService.java
│ ├── LostAndFoundServiceImpl.java
│ ├── MailService.java
│ ├── MarketPlaceService.java
│ ├── MarketPlaceServiceImpl.java
│ ├── MemberService.java
│ ├── MemberServiceImpl.java
│ ├── OwnerService.java
│ ├── OwnerServiceImpl.java
│ ├── OwnerShopService.java
│ ├── OwnerShopServiceImpl.java
│ ├── PageResourceService.java
│ ├── PageResourceServiceImpl.java
│ ├── RefreshJwtValidator.java
│ ├── S3UploadServiceImpl.java
│ ├── SearchService.java
│ ├── SearchServiceImpl.java
│ ├── ShopService.java
│ ├── ShopServiceImpl.java
│ ├── SlackBotService.java
│ ├── SlackBotServiceImpl.java
│ ├── TemporaryAccessJwtGenerator.java
│ ├── TemporaryCommunityService.java
│ ├── TemporaryCommunityServiceImpl.java
│ ├── TimeTableService.java
│ ├── TimeTableServiceImpl.java
│ ├── TrackService.java
│ ├── TrackServiceImpl.java
│ ├── UploadService.java
│ ├── UserAccessJwtGenerator.java
│ ├── UserRefreshJwtGenerator.java
│ ├── UserService.java
│ ├── UserServiceImpl.java
│ ├── VersionService.java
│ ├── VersionServiceImpl.java
│ └── admin
│ │ ├── AdminShopService.java
│ │ ├── AdminShopServiceImpl.java
│ │ ├── AdminUserService.java
│ │ └── AdminUserServiceImpl.java
│ ├── skillresponse
│ ├── KakaoBot.java
│ └── SkillResponse.java
│ ├── swagger
│ └── SwaggerConfig.java
│ ├── util
│ ├── ApplicationContextProvider.java
│ ├── AwsSesConfig.java
│ ├── BeanUtil.java
│ ├── DateUtil.java
│ ├── HttpHeaderValue.java
│ ├── HttpHeaderValueAttacher.java
│ ├── IframeListener.java
│ ├── JsonConstructor.java
│ ├── RandomGenerator.java
│ ├── S3Util.java
│ ├── SHA256Util.java
│ ├── SearchUtil.java
│ ├── SesMailSender.java
│ ├── SlackNotiSender.java
│ ├── StringRedisUtil.java
│ ├── StringRedisUtilObj.java
│ ├── StringRedisUtilStr.java
│ ├── StringXssChecker.java
│ ├── UploadFileUtils.java
│ ├── filter
│ │ ├── AllowedOrigins.java
│ │ ├── CORSFilter.java
│ │ └── Origin.java
│ └── jwt
│ │ ├── JwtKeyManager.java
│ │ └── JwtUtil.java
│ └── validator
│ └── OwnerValidator.java
├── resources
├── common
│ ├── application_context_provider.xml
│ ├── config.xml
│ ├── context-datasource.xml
│ ├── context-mapper.xml
│ ├── context-scheduler.xml
│ ├── mailSend.xml
│ ├── mybatis.xml
│ ├── redis.xml
│ ├── search.xml
│ ├── security.xml
│ ├── sesMailSender.xml
│ └── slack_noti.xml
├── config
│ └── config.example.properties
├── db
│ └── migration
│ │ ├── V10__alter_and_insert_version_in_versions_table.sql
│ │ ├── V11__create_activities_table.sql
│ │ ├── V12__create_members_table.sql
│ │ ├── V13__create_tracks_table.sql
│ │ ├── V14__create_tech_stacks_table.sql
│ │ ├── V15__alter_add_grant_bcsdlab_in_admins_table.sql
│ │ ├── V16__create_shop_view_logs_table.sql
│ │ ├── V17__alter_add_hits_in_shops_table.sql
│ │ ├── V18__change_comment_count_unsigned.sql
│ │ ├── V19__alter_thumbnail_length_in_items_tables.sql
│ │ ├── V1__alter_design_score_in_lectures_table.sql
│ │ ├── V20__create_search_articles_table.sql
│ │ ├── V21__create_holidays_table.sql
│ │ ├── V22__create_event_board.sql
│ │ ├── V23__create_event_articles.sql
│ │ ├── V24__create_event_articles_view_logs.sql
│ │ ├── V25__create_users_owners.sql
│ │ ├── V26__create_event_comments.sql
│ │ ├── V27__add_grant_event.sql
│ │ ├── V28__create_shop_owners.sql
│ │ ├── V2__alter_professor_in_lectures_table.sql
│ │ ├── V30__alter_add_weekend_time_in_shops_table.sql
│ │ ├── V31__create_courses_table.sql
│ │ ├── V32__create_and_add_departments.sql
│ │ ├── V33__create_student_table.sql
│ │ ├── V34__insert_users_data_to_students_table.sql
│ │ ├── V35__alter_users_table.sql
│ │ ├── V36__create_owner_table.sql
│ │ ├── V37__alter_add_usertype_delete_remember_token_and_identity_in_users_table.sql
│ │ ├── V38__add_identity_to_students_table.sql
│ │ ├── V39__alter_company_registration_number_image_url_name_and_delete_is_authed_owners_table.sql
│ │ ├── V3__alter_target_in_lectures_table.sql
│ │ ├── V40__add_owner_id_to_shops_table.sql
│ │ ├── V41__alter_portal_account_to_account_in_users_table.sql
│ │ ├── V42__add_email__to_users_table.sql
│ │ ├── V43__update_users_account_data_to_email.sql
│ │ ├── V44__alter_comment_to_every_table.sql
│ │ ├── V45__alter_students_token_info_to_user_table.sql
│ │ ├── V46__remove_unique_constraint_of_users_table.sql
│ │ ├── V47__update_user_type_to_student_of_all_row.sql
│ │ ├── V48__alter_is_graduated_to_nullable_in_students_table.sql
│ │ ├── V49__add_nickname_unique_constraint_of_users_table.sql
│ │ ├── V4__create_timetables_table.sql
│ │ ├── V50__add_account_unique_constraint_of_users_table.sql
│ │ ├── V51__create_owner_shop_attachment_table.sql
│ │ ├── V52__add_email_unique_constraint_of_users_table.sql
│ │ ├── V53__create_shop_menu_details_table.sql
│ │ ├── V54__create_shop_menu_images_table.sql
│ │ ├── V55__create_shop_menu_categories_table.sql
│ │ ├── V56__create_shop_menu_category_map_table.sql
│ │ ├── V57__create_shop_images_table.sql
│ │ ├── V58__create_shop_categories_table.sql
│ │ ├── V59__create_shop_category_map_table.sql
│ │ ├── V5__create_semester_table.sql
│ │ ├── V60__create_shop_opens_table.sql
│ │ ├── V61__add_unique_constraint_to_shop_category_map_table.sql
│ │ ├── V62__add_unique_constraint_to_shop_images_table.sql
│ │ ├── V63__add_unique_constraint_to_shop_menu_category_map_table.sql
│ │ ├── V64__add_unique_constraint_to_shop_menu_images_table.sql
│ │ ├── V65__add_unique_constraint_to_shop_menu_details_table.sql
│ │ ├── V66__insert_full_view_category_relation_into_shop_category_map_table.sql
│ │ ├── V67__alter_shops_table.sql
│ │ ├── V68__alter_shop_menus_table.sql
│ │ ├── V69.000__alter_drop_user_account.sql
│ │ ├── V69.001__alter_remove_notnull_owner_url.sql
│ │ ├── V6__alter_add_is_deleted_in_timetables.sql
│ │ ├── V70.000__drop_fk_owner_attachment_shop_id.sql
│ │ ├── V70.001__drop_column_owner_attachment_shop_id.sql
│ │ ├── V70.002__change_table_name_owner_attachment.sql
│ │ ├── V71.000__increase_version_type_size.sql
│ │ ├── V72__alter_owners_company_registration_number_is_nullable.sql
│ │ ├── V73.000__add_auto_incremet_semester.sql
│ │ ├── V74__add_column_owner_attachments_table_created_at.sql
│ │ ├── V7__alter_add_timestamp_in_timetables_table.sql
│ │ ├── V8__alter_add_grades_in_timetables_table.sql
│ │ └── V9__alter_add_more_columns_in_timetables_table.sql
├── lucy-xss-sax.xml
├── lucy-xss-servlet-filter-rule.xml
├── lucy-xss-superset-sax.xml
├── mail
│ ├── change_password_certificate_button.vm
│ ├── change_password_certificate_number.vm
│ ├── owner_certificate_number.vm
│ └── register_authenticate.vm
├── mapper
│ ├── admin
│ │ ├── AdminLandMapper.xml
│ │ ├── AdminMemberMapper.xml
│ │ ├── AdminShopMapper.xml
│ │ ├── AdminTrackMapper.xml
│ │ └── AdminUserMapper.xml
│ └── normal
│ │ ├── OwnerMapper.xml
│ │ ├── ShopMapper.xml
│ │ ├── StudentMapper.xml
│ │ └── UserMapper.xml
├── white-url.xml
└── xssfilter-extension.properties
└── webapp
├── WEB-INF
├── resources
│ └── js
│ │ ├── password.check.js
│ │ └── sha256.min.js
├── root-context.xml
├── servlet-context.xml
├── views
│ ├── home.jsp
│ └── mail
│ │ ├── change_password_certificate_button.jsp
│ │ ├── change_password_certificate_number.jsp
│ │ ├── change_password_config.jsp
│ │ ├── error_config.jsp
│ │ ├── owner_certificate_number.jsp
│ │ ├── register_authenticate.jsp
│ │ ├── success_change_password_config.jsp
│ │ └── success_register_config.jsp
└── web.xml
└── index.jsp
/.editorconfig:
--------------------------------------------------------------------------------
1 | # top-most EditorConfig file
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | end_of_line = lf
7 | insert_final_newline = true
8 |
9 | [*.bat]
10 | end_of_line = crlf
11 |
12 | [*.adoc]
13 | indent_style = space
14 | indent_size = 4
15 | tab_width = 4
16 | trim_trailing_whitespace = true
17 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/BUG_REPORT.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug Report
3 | about: Service's Bug report.
4 | title: ''
5 | labels: "bug"
6 | assignees: ''
7 | ---
8 |
9 | ## Description
10 |
11 |
12 | ## Remark
13 |
14 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/FEATURE.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature
3 | about: A feature with a list of APIs
4 | title: ''
5 | labels: "enhancement"
6 | assignees: ''
7 | ---
8 |
9 | ## Description
10 |
11 |
12 | ## Task List
13 |
14 |
15 | - [ ] Task1
16 |
17 | ## Remark
18 |
19 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/NEW_FEATURE.md:
--------------------------------------------------------------------------------
1 | ## 📛Feature Name
2 |
3 | ## ✅Progress
4 |
5 | ## ⚠️Precautions
6 |
7 | ## 📜References
8 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## ▶ Request
2 | ### Content
3 |
4 | ### as-is
5 |
6 | ### to-be
7 |
8 |
9 | ## ✅ Check List
10 | - [ ] 의도치 않은 변경이 일어나지 않았는지.
11 | - 실수로 라이브러리(`pom.xml`) 변경이 일어나지 않았는지
12 | - 병합시 컴파일 & 런타임 에러가 발생하지 않는지
13 | - 기존 클라이언트와의 호환성 고려가 잘 이루어졌는지
14 | - [ ] 작성한 코드가 프로젝트에 반영됨을 명심하였는지
15 | - 타인도 알아보고 변경할 수 있는 코드를 작성하였는지
16 | - 코드 & 커밋 컨벤션을 준수하였는지
17 | - (필요한) 문서화가 진행되었는지
18 | - [ ] (기능 추가의 경우) 클라이언트의 입장에 대한 충분한 고려가 이루어졌는지
19 | - 클라이언트 측과 협의가 된 내용인 경우
20 | - 클라이언트의 요구사항을 잘 반영하는지
21 | - API 문서에 논리적인 오류 & 가시성이 떨어지는 내용이 없는지
22 |
23 |
24 | ## 📸 API Document ScreenShot
25 |
26 |
27 | ## 🧪 Test
28 |
29 | - [ ] ` `
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # IntelliJ
2 | .idea/
3 | projectName.iml
4 | /*.classpath
5 | /.classpath
6 | /.springBeans
7 | *.DS_Store
8 | *.iml
9 | /build
10 | /local.properties
11 | target/
12 | out/
13 |
14 | # properties file
15 | src/main/resources/config/config.properties
16 | flyway.properties
17 |
18 | classes/*
19 | lib/*
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # KOIN_API
2 | KOIN Community (ver. Spring Framework)
3 |
--------------------------------------------------------------------------------
/flyway.example.properties:
--------------------------------------------------------------------------------
1 | flyway.url=
2 | flyway.user=
3 | flyway.password=
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/ApiOff.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target({ElementType.TYPE, ElementType.METHOD})
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface ApiOff {
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/Auth.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target({ElementType.TYPE, ElementType.METHOD})
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface Auth {
11 | enum Role { ADMIN, USER, STUDENT, OWNER, NONE }
12 | enum Authority { USER, CALLVAN, LAND, COMMUNITY, SHOP, VERSION, MARKET, CIRCLE, LOST, SURVEY, BCSDLAB, EVENT, NONE }
13 |
14 | Role role() default Role.NONE;
15 | Authority authority() default Authority.NONE;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/AuthExcept.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target(ElementType.METHOD)
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface AuthExcept {
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/AuthTemporary.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target(ElementType.METHOD)
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface AuthTemporary {
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/Login.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 |
4 | import java.lang.annotation.ElementType;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.RetentionPolicy;
7 | import java.lang.annotation.Target;
8 |
9 | @Target({ElementType.PARAMETER})
10 | @Retention(RetentionPolicy.RUNTIME)
11 | public @interface Login {
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/OwnerRegistrationInfomation.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import koreatech.in.validator.OwnerValidator;
4 |
5 | import javax.validation.Constraint;
6 | import javax.validation.Payload;
7 | import java.lang.annotation.Documented;
8 | import java.lang.annotation.ElementType;
9 | import java.lang.annotation.Retention;
10 | import java.lang.annotation.RetentionPolicy;
11 | import java.lang.annotation.Target;
12 |
13 | @Documented
14 | @Constraint(validatedBy = OwnerValidator.class)
15 | @Target( { ElementType.TYPE })
16 | @Retention(RetentionPolicy.RUNTIME)
17 | public @interface OwnerRegistrationInfomation {
18 | String message() default "사업자등록번호와 첨부파일에 대해 아무것도 입력 안하거나 혹은 모두 입력해야합니다.";
19 | Class>[] groups() default {};
20 | Class extends Payload>[] payload() default {};
21 |
22 | String companyNumber();
23 | String attachmentUrls();
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/ParamValid.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target(ElementType.METHOD)
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface ParamValid { }
11 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/ValidationGroups.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import javax.validation.groups.Default;
4 |
5 | /**
6 | * Utility classes to distinct CRUD validations.
7 | *
8 | * Used with the
9 | * {@link org.springframework.validation.annotation.Validated @Validated}
10 | * Spring annotation.
11 | */
12 | public final class ValidationGroups {
13 |
14 | private ValidationGroups() { }
15 |
16 | // Standard groups
17 |
18 | public interface Create extends Default {};
19 | public interface Update extends Default {};
20 |
21 | // Admin groups
22 |
23 | public interface CreateAdmin extends Default {};
24 | public interface UpdateAdmin extends Default {};
25 | }
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/annotation/XssFilter.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target({ElementType.METHOD})
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface XssFilter {
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/config/WebConfig.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.config;
2 |
3 | import java.util.Collections;
4 |
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 | import org.springframework.context.support.ConversionServiceFactoryBean;
8 | import org.springframework.web.servlet.config.annotation.EnableWebMvc;
9 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
10 |
11 | import koreatech.in.converter.DomainEnumConvertor;
12 |
13 | @Configuration
14 | @EnableWebMvc
15 | public class WebConfig extends WebMvcConfigurerAdapter {
16 | @Bean
17 | public ConversionServiceFactoryBean conversionService() {
18 | ConversionServiceFactoryBean conversionService = new ConversionServiceFactoryBean();
19 | conversionService.setConverters(Collections.singleton(new DomainEnumConvertor()));
20 | return conversionService;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/koreatech/in/controller/ActivityController.java:
--------------------------------------------------------------------------------
1 | package koreatech.in.controller;
2 |
3 | import io.swagger.annotations.Api;
4 | import io.swagger.annotations.ApiParam;
5 | import koreatech.in.service.ActivityService;
6 | import org.springframework.http.HttpStatus;
7 | import org.springframework.http.ResponseEntity;
8 | import org.springframework.stereotype.Controller;
9 | import org.springframework.web.bind.annotation.RequestMapping;
10 | import org.springframework.web.bind.annotation.RequestMethod;
11 | import org.springframework.web.bind.annotation.RequestParam;
12 | import org.springframework.web.bind.annotation.ResponseBody;
13 |
14 | import javax.annotation.Resource;
15 | import java.util.Map;
16 |
17 | @Api(tags = "(Normal) Activity", description = "BCSDLab 활동")
18 | @Controller
19 | public class ActivityController {
20 | @Resource(name = "activityService")
21 | private ActivityService activityService;
22 |
23 | @RequestMapping(value = "/activities", method = RequestMethod.GET)
24 | public @ResponseBody
25 | ResponseEntity getActivities(@ApiParam(value = "optional", required = false) @RequestParam(value = "year", required = false) String year) throws Exception {
26 | return new ResponseEntity