├── iOS
├── FlipMate
│ ├── Feature
│ │ ├── .gitkeep
│ │ ├── Chart
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ │ └── ChartTests
│ │ │ │ │ └── ChartTests.swift
│ │ │ ├── Sources
│ │ │ │ └── Chart
│ │ │ │ │ └── Model
│ │ │ │ │ └── WeeklySection.swift
│ │ │ └── Package.swift
│ │ ├── Category
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ │ └── CategoryTests
│ │ │ │ │ └── CategoryTests.swift
│ │ │ └── Package.swift
│ │ ├── MyPage
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ │ └── MyPageTests
│ │ │ │ │ └── MyPageTests.swift
│ │ │ └── Package.swift
│ │ └── Service
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ └── ServiceTests
│ │ │ │ └── ServiceTests.swift
│ │ │ ├── Sources
│ │ │ └── CategoryService
│ │ │ │ └── CategoryServiceInterface
│ │ │ │ └── CategoryManageable.swift
│ │ │ └── Package.swift
│ ├── FlipMate
│ │ ├── Application
│ │ │ ├── DIContainer
│ │ │ │ ├── .gitkeep
│ │ │ │ ├── AppDIContainer.swift
│ │ │ │ └── ChartDIContainer.swift
│ │ │ ├── AppDelegate.swift
│ │ │ └── Coordinator
│ │ │ │ └── ChartFlow
│ │ │ │ └── ChartFlowCoordinator.swift
│ │ ├── Presentation
│ │ │ └── ChartScene
│ │ │ │ └── .gitkeep
│ │ ├── Data
│ │ │ ├── Sources
│ │ │ │ └── Data
│ │ │ │ │ ├── Network
│ │ │ │ │ ├── DataMapping
│ │ │ │ │ │ ├── .gitkeep
│ │ │ │ │ │ ├── TimerScene
│ │ │ │ │ │ │ ├── TimeZoneRequestDTO.swift
│ │ │ │ │ │ │ ├── TimerStartRequestDTO.swift
│ │ │ │ │ │ │ ├── TimerFinishRequestDTO.swift
│ │ │ │ │ │ │ ├── TimerStartResponseDTO.swift
│ │ │ │ │ │ │ ├── TimerFinishResponseDTO.swift
│ │ │ │ │ │ │ └── StudyLogResponseDTO.swift
│ │ │ │ │ │ ├── StatusResponseDTO.swift
│ │ │ │ │ │ ├── SocialScene
│ │ │ │ │ │ │ ├── FriendUnfollowRequestDTO.swift
│ │ │ │ │ │ │ ├── FriendFollowReqeustDTO.swift
│ │ │ │ │ │ │ ├── SocialDetailRequestDTO.swift
│ │ │ │ │ │ │ ├── FreindStatusResponseDTO.swift
│ │ │ │ │ │ │ ├── UserProfileResposeDTO.swift
│ │ │ │ │ │ │ ├── SocialDetailResponseDTO.swift
│ │ │ │ │ │ │ └── FriendsResponseDTO.swift
│ │ │ │ │ │ ├── StatusResponseWithErrorDTO.swift
│ │ │ │ │ │ ├── LoginScene
│ │ │ │ │ │ │ ├── GoogleAuthRequestDTO.swift
│ │ │ │ │ │ │ ├── AppleAuthRequestDTO.swift
│ │ │ │ │ │ │ ├── NickNameValidationResponseDTO.swift
│ │ │ │ │ │ │ ├── AuthResponseDTO.swift
│ │ │ │ │ │ │ ├── UserInfoResponseDTO.swift
│ │ │ │ │ │ │ └── SignUpResponseDTO.swift
│ │ │ │ │ │ ├── Category
│ │ │ │ │ │ │ ├── CategoryRequestDTO.swift
│ │ │ │ │ │ │ └── CategoryResponseDTO.swift
│ │ │ │ │ │ └── ChartScene
│ │ │ │ │ │ │ ├── WeeklyChartLogResponseDTO.swift
│ │ │ │ │ │ │ └── DailyChartLogResponseDTO.swift
│ │ │ │ │ ├── StudyLogEndpoints.swift
│ │ │ │ │ ├── BaseComponents.swift
│ │ │ │ │ ├── ChartEndpoints.swift
│ │ │ │ │ ├── UserInfoEndpoints.swift
│ │ │ │ │ ├── SocialEndpoints.swift
│ │ │ │ │ ├── AuthenticationEndpoints.swift
│ │ │ │ │ ├── TimerEndpoints.swift
│ │ │ │ │ └── SignUpEndpoints.swift
│ │ │ │ │ ├── Repositories
│ │ │ │ │ ├── DefaultStudyLogRepository.swift
│ │ │ │ │ ├── DefaultProfileSettingsRepository.swift
│ │ │ │ │ └── DefaultUserInfoRepository.swift
│ │ │ │ │ └── Extensions
│ │ │ │ │ └── Data++Extension.swift
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ │ └── DataTests
│ │ │ │ │ └── DataTests.swift
│ │ │ └── Package.swift
│ │ ├── DesignSystem
│ │ │ ├── Sources
│ │ │ │ └── DesignSystem
│ │ │ │ │ ├── Resources
│ │ │ │ │ └── Assets.xcassets
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── FilpMateColor
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── DarkBlue.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Gray2.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Gray4.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Gray5.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── TabBarIconUnSelected.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Gray1.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Gray3.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── TabBarColor.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── ApproveGreen.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── TabBarLayerColor.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── WarningRed.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── TabBarIconSelected.colorset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── AppIcon.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── AccentColor.colorset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── FlipMate_icon.imageset
│ │ │ │ │ │ ├── FlipMate_icon 1.png
│ │ │ │ │ │ ├── FlipMate_icon@2x.png
│ │ │ │ │ │ ├── FlipMate_icon@3x 1.png
│ │ │ │ │ │ ├── FlipMate_icon_dark.png
│ │ │ │ │ │ ├── FlipMate_icon_dark@2x.png
│ │ │ │ │ │ ├── FlipMate_icon_dark@3x.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── FlipMate_Dark_icon.imageset
│ │ │ │ │ │ ├── FlipMate_icon.png
│ │ │ │ │ │ ├── FlipMate_icon@2x.png
│ │ │ │ │ │ ├── FlipMate_icon@3x.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── DefaultProfileImage.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── DefaultProfileImage.svg
│ │ │ │ │ │ ├── instruction_EN.imageset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── instruction_JP.imageset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Extension
│ │ │ │ │ ├── UICollectionReusableView++Extension.swift
│ │ │ │ │ ├── UIImage++Extension.swift
│ │ │ │ │ ├── UIView++Extension.swift
│ │ │ │ │ ├── UITextField++Extension.swift
│ │ │ │ │ ├── UICollectionViewCell++Extension.swift
│ │ │ │ │ ├── UIImageView++Extension.swift
│ │ │ │ │ └── UIViewController++Extension.swift
│ │ │ │ │ ├── Base
│ │ │ │ │ └── BaseViewController.swift
│ │ │ │ │ ├── Buttons
│ │ │ │ │ └── DoneButton.swift
│ │ │ │ │ └── Font
│ │ │ │ │ └── FlipMateFont.swift
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ │ └── DesignSystemTests
│ │ │ │ │ └── DesignSystemTests.swift
│ │ │ └── Package.swift
│ │ ├── Core
│ │ │ ├── .gitignore
│ │ │ ├── Sources
│ │ │ │ └── Core
│ │ │ │ │ ├── Constant
│ │ │ │ │ └── NotificationName.swift
│ │ │ │ │ ├── Error
│ │ │ │ │ ├── APIError.swift
│ │ │ │ │ └── NetworkError.swift
│ │ │ │ │ ├── Extension
│ │ │ │ │ ├── CGFloat++Extension.swift
│ │ │ │ │ ├── String++Extension.swift
│ │ │ │ │ ├── DateFormatter++Extension.swift
│ │ │ │ │ ├── Int++Extension.swift
│ │ │ │ │ └── Date++Extension.swift
│ │ │ │ │ └── Logger
│ │ │ │ │ └── Logger.swift
│ │ │ ├── Tests
│ │ │ │ └── CoreTests
│ │ │ │ │ └── CoreTests.swift
│ │ │ └── Package.swift
│ │ ├── Domain
│ │ │ ├── .gitignore
│ │ │ ├── Sources
│ │ │ │ └── Domain
│ │ │ │ │ ├── UseCaseProtocols
│ │ │ │ │ ├── Authentication
│ │ │ │ │ │ ├── SignOutUseCase.swift
│ │ │ │ │ │ ├── WithdrawUseCase.swift
│ │ │ │ │ │ ├── GoogleLoginUseCase.swift
│ │ │ │ │ │ └── AppleLoginUseCase.swift
│ │ │ │ │ ├── StudingPingUseCase.swift
│ │ │ │ │ ├── PatchTimeZoneUseCase.swift
│ │ │ │ │ ├── Category
│ │ │ │ │ │ ├── DeleteCategoryUseCase.swift
│ │ │ │ │ │ ├── ReadCategoryUseCase.swift
│ │ │ │ │ │ ├── CreateCategoryUseCase.swift
│ │ │ │ │ │ └── UpdateCategoryUseCase.swift
│ │ │ │ │ ├── Chart
│ │ │ │ │ │ ├── FetchDailyChartUseCase.swift
│ │ │ │ │ │ ├── FetchWeeklyChartUseCase.swift
│ │ │ │ │ │ └── LoadChartUseCase.swift
│ │ │ │ │ ├── GetStudyLogUseCase.swift
│ │ │ │ │ ├── GetUserInfoUseCase.swift
│ │ │ │ │ ├── ValidateNicknameUseCase.swift
│ │ │ │ │ ├── Social
│ │ │ │ │ │ ├── SetupProfileInfoUseCase.swift
│ │ │ │ │ │ ├── GetFriendsUseCase.swift
│ │ │ │ │ │ └── FetchFriendsUseCase.swift
│ │ │ │ │ ├── Friend
│ │ │ │ │ │ ├── FollowFriendUseCase.swift
│ │ │ │ │ │ ├── UnfollowFriendUseCase.swift
│ │ │ │ │ │ └── SearchFriendUseCase.swift
│ │ │ │ │ └── Timer
│ │ │ │ │ │ ├── StartTimerUseCase.swift
│ │ │ │ │ │ └── FinishTimerUseCase.swift
│ │ │ │ │ ├── RepositoryProtocols
│ │ │ │ │ ├── ChartRepository.swift
│ │ │ │ │ ├── StudyLogRepository.swift
│ │ │ │ │ ├── UserInfoRepository.swift
│ │ │ │ │ ├── AuthenticationRepository.swift
│ │ │ │ │ ├── SocialRepository.swift
│ │ │ │ │ ├── ProfileSettingsRepository.swift
│ │ │ │ │ ├── CategoryRepository.swift
│ │ │ │ │ ├── TimerRepository.swift
│ │ │ │ │ └── FriendRepository.swift
│ │ │ │ │ ├── Entities
│ │ │ │ │ ├── User.swift
│ │ │ │ │ ├── UserInfo.swift
│ │ │ │ │ ├── FriendStatus.swift
│ │ │ │ │ ├── Category.swift
│ │ │ │ │ ├── FriendSearchResult.swift
│ │ │ │ │ └── Friend.swift
│ │ │ │ │ └── UseCaseImplementations
│ │ │ │ │ ├── Authentication
│ │ │ │ │ ├── DefaultSignOutUseCase.swift
│ │ │ │ │ ├── DefaultWithdrawUseCase.swift
│ │ │ │ │ ├── DefaultGoogleLoginUseCase.swift
│ │ │ │ │ └── DefaultAppleLoginUseCase.swift
│ │ │ │ │ ├── DefaultStudingPingUseCase.swift
│ │ │ │ │ ├── DefaultPatchTimeZoneUseCase.swift
│ │ │ │ │ ├── Category
│ │ │ │ │ ├── DefaultDeleteCategoryUseCase.swift
│ │ │ │ │ ├── DefaultReadCategoryUseCase.swift
│ │ │ │ │ ├── DefaultCreateCategoryUseCase.swift
│ │ │ │ │ └── DefaultUpdateCategoryUseCase.swift
│ │ │ │ │ ├── Chart
│ │ │ │ │ ├── DefaultFetchWeeklyChartUseCase.swift
│ │ │ │ │ ├── DefaultLoadChartUseCase.swift
│ │ │ │ │ └── DefaultFetchDailyChartUseCase.swift
│ │ │ │ │ ├── DefaultGetUserInfoUseCase.swift
│ │ │ │ │ ├── DefaultGetStudyLogUseCase.swift
│ │ │ │ │ ├── Social
│ │ │ │ │ ├── DefaultGetFriendUseCase.swift
│ │ │ │ │ ├── DefaultFetchFriendUseCase.swift
│ │ │ │ │ └── DefaultSetupProfileInfoUseCase.swift
│ │ │ │ │ ├── Friend
│ │ │ │ │ ├── DefaultUnfollowFriendUseCase.swift
│ │ │ │ │ ├── DefaultFollowFriendUseCase.swift
│ │ │ │ │ └── DefaultSearchFriendUseCase.swift
│ │ │ │ │ ├── DefaultValidateNicknameUseCase.swift
│ │ │ │ │ └── Timer
│ │ │ │ │ ├── DefaultStartTimerUseCase.swift
│ │ │ │ │ └── DefaultFinishTimerUseCase.swift
│ │ │ ├── Tests
│ │ │ │ └── DomainTests
│ │ │ │ │ └── DomainTests.swift
│ │ │ └── Package.swift
│ │ ├── Login
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ │ └── LoginTests
│ │ │ │ │ └── LoginTests.swift
│ │ │ └── Sources
│ │ │ │ └── Login
│ │ │ │ └── Model
│ │ │ │ └── LoginType.swift
│ │ ├── Network
│ │ │ ├── .gitignore
│ │ │ ├── Sources
│ │ │ │ └── Network
│ │ │ │ │ ├── Responsable.swift
│ │ │ │ │ ├── HTTPMethod.swift
│ │ │ │ │ ├── HTTPHeader.swift
│ │ │ │ │ ├── Requestable.swift
│ │ │ │ │ └── URLSessionable.swift
│ │ │ ├── Tests
│ │ │ │ └── NetworkTests
│ │ │ │ │ ├── Models
│ │ │ │ │ └── TestConstant.swift
│ │ │ │ │ └── Utils
│ │ │ │ │ ├── MockKeychainManager.swift
│ │ │ │ │ └── MockURLProtocol.swift
│ │ │ └── Package.swift
│ │ ├── Social
│ │ │ ├── .gitignore
│ │ │ ├── Sources
│ │ │ │ └── Social
│ │ │ │ │ └── Model
│ │ │ │ │ ├── FriendUser.swift
│ │ │ │ │ ├── FriendSearchItem.swift
│ │ │ │ │ ├── ProfileHeaderItem.swift
│ │ │ │ │ └── UpdateFriend.swift
│ │ │ ├── Tests
│ │ │ │ └── SocialTests
│ │ │ │ │ └── SocialTests.swift
│ │ │ └── Package.swift
│ │ ├── TabBar
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ │ └── TabBarTests
│ │ │ │ │ └── TabBarTests.swift
│ │ │ └── Package.swift
│ │ ├── Timer
│ │ │ ├── .gitignore
│ │ │ ├── Sources
│ │ │ │ └── Timer
│ │ │ │ │ └── Model
│ │ │ │ │ └── DeviceOrientation.swift
│ │ │ ├── Tests
│ │ │ │ └── TimerTests
│ │ │ │ │ └── TimerTests.swift
│ │ │ └── Package.swift
│ │ ├── FlipMate.entitlements
│ │ ├── Selection.ahap
│ │ └── Resources
│ │ │ └── Info.plist
│ ├── FlipMate.xcodeproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── .swiftlint.yml
├── FMImageProvider
│ ├── .gitignore
│ ├── .swiftpm
│ │ └── xcode
│ │ │ └── package.xcworkspace
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── Sources
│ │ └── FMImageProvider
│ │ │ ├── Utils
│ │ │ └── Logger.swift
│ │ │ └── Protocols
│ │ │ ├── MemoryCacheable.swift
│ │ │ ├── DiskCacheable.swift
│ │ │ └── ImageDownloadable.swift
│ ├── Tests
│ │ └── FMImageProviderTests
│ │ │ ├── Utils
│ │ │ └── Logger.swift
│ │ │ └── Model
│ │ │ └── Dummy.swift
│ └── Package.swift
└── FlipMate.xctestplan
├── BE
├── test
│ ├── mock-table
│ │ ├── redis-study-logs.json
│ │ ├── mates.json
│ │ ├── users.json
│ │ ├── study-logs.json
│ │ └── categories.json
│ ├── mock-service
│ │ ├── mock-config-service.ts
│ │ ├── mock-user-service.ts
│ │ ├── mock-redis-service.ts
│ │ └── mock-study-logs-service.ts
│ ├── jest-e2e.json
│ ├── app.e2e-spec.ts
│ ├── load-performance
│ │ └── loadtest-social.js
│ └── mock-repo
│ │ └── mock-categories-repo.ts
├── .prettierrc
├── src
│ ├── common
│ │ ├── const
│ │ │ ├── service-var.const.ts
│ │ │ └── env-keys.const.ts
│ │ ├── config
│ │ │ ├── static.config.ts
│ │ │ ├── swagger.config.ts
│ │ │ ├── jwt.config.ts
│ │ │ ├── multer.config.ts
│ │ │ ├── typeorm.config.ts
│ │ │ └── logging.config.ts
│ │ ├── middleware
│ │ │ └── logging.middleware.ts
│ │ ├── response.dto.ts
│ │ ├── utils
│ │ │ └── utils.ts
│ │ ├── redis.service.ts
│ │ ├── exception-filter
│ │ │ └── http-exception-filter.ts
│ │ ├── interceptor
│ │ │ └── logging.interceptor.ts
│ │ └── s3.service.ts
│ ├── users
│ │ ├── const
│ │ │ └── auth-type.const.ts
│ │ ├── dto
│ │ │ ├── response
│ │ │ │ ├── nickname-validation.dto.ts
│ │ │ │ └── user-profile.dto.ts
│ │ │ ├── create-user.dto.ts
│ │ │ └── update-user.dto.ts
│ │ ├── interface
│ │ │ └── greeneye.interface.ts
│ │ ├── users.module.ts
│ │ └── decorator
│ │ │ └── user.decorator.ts
│ ├── app.service.ts
│ ├── mates
│ │ ├── dto
│ │ │ ├── response
│ │ │ │ ├── status-message.dto.ts
│ │ │ │ ├── mates.dto.ts
│ │ │ │ ├── mates-info.dto.ts
│ │ │ │ └── follower-info.dto.ts
│ │ │ └── request
│ │ │ │ └── pagination-query.dto.ts
│ │ ├── mates.module.ts
│ │ └── mates.entity.ts
│ ├── categories
│ │ ├── dto
│ │ │ ├── request
│ │ │ │ ├── create-categories.dto.ts
│ │ │ │ └── update-categories.dto.ts
│ │ │ └── response
│ │ │ │ └── category.dto.ts
│ │ ├── categories.module.ts
│ │ └── categories.entity.ts
│ ├── app.controller.ts
│ ├── admin
│ │ └── admin.module.ts
│ ├── study-logs
│ │ ├── dto
│ │ │ ├── response
│ │ │ │ ├── today-logs.dto.ts
│ │ │ │ ├── daily-stat.dto.ts
│ │ │ │ ├── weekly-stats.dto.ts
│ │ │ │ └── study-logs.dto.ts
│ │ │ └── request
│ │ │ │ └── create-study-logs.dto.ts
│ │ └── study-logs.module.ts
│ ├── auth
│ │ ├── dto
│ │ │ └── response
│ │ │ │ ├── update-info.dto.ts
│ │ │ │ └── get-info.dto.ts
│ │ ├── google.strategy.ts
│ │ ├── auth.service.spec.ts
│ │ └── auth.module.ts
│ ├── heartbeat
│ │ ├── heartbeat.module.ts
│ │ └── heartbeat.controller.ts
│ └── app.controller.spec.ts
├── tsconfig.build.json
├── nest-cli.json
├── .gitignore
├── tsconfig.json
└── .eslintrc.js
├── .DS_Store
└── .github
├── pull_request_template.md
├── ISSUE_TEMPLATE
├── be-template.md
├── 버그-리포트.md
└── ios-feature-template.md
└── workflows
├── be-main-workflow.yaml
└── be-pre-production-workflow.yaml
/iOS/FlipMate/Feature/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/BE/test/mock-table/redis-study-logs.json:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Application/DIContainer/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Presentation/ChartScene/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Data/Sources/Data/Network/DataMapping/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/BE/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "all"
4 | }
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/.DS_Store
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | # 이슈번호-작업이름
2 |
3 | ## 완료된 기능
4 |
5 |
6 | ## 고민과 해결과정
7 |
--------------------------------------------------------------------------------
/BE/src/common/const/service-var.const.ts:
--------------------------------------------------------------------------------
1 | export const MATES_MAXIMUM = 10;
2 | export const CATEGORIES_MAXIMUM = 10;
3 |
--------------------------------------------------------------------------------
/BE/src/users/const/auth-type.const.ts:
--------------------------------------------------------------------------------
1 | export enum AuthTypeEnum {
2 | GOOGLE = 'google',
3 | APPLE = 'apple',
4 | }
5 |
--------------------------------------------------------------------------------
/BE/test/mock-table/mates.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "follower_id": 1,
5 | "following_id": 2
6 | }
7 | ]
--------------------------------------------------------------------------------
/BE/tsconfig.build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
4 | }
5 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/BE/src/app.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from '@nestjs/common';
2 |
3 | @Injectable()
4 | export class AppService {
5 | getHello(): string {
6 | return 'Hello World!';
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FilpMateColor/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/be-template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: BE Template
3 | about: BE Template
4 | title: ''
5 | labels: BE
6 | assignees: victolee0, yeongbinim
7 |
8 | ---
9 |
10 | ## Why
11 |
12 | ## Todo
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/버그-리포트.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 버그 리포트
3 | about: 버그 리포트를 위한 탬플릿입니다
4 | title: ''
5 | labels: "\U0001F41E Bug"
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## 버그 발생 환경
11 |
12 | ## 버그 발생 내용
13 |
--------------------------------------------------------------------------------
/BE/nest-cli.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/nest-cli",
3 | "collection": "@nestjs/schematics",
4 | "sourceRoot": "src",
5 | "compilerOptions": {
6 | "deleteOutDir": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/BE/src/common/config/static.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 |
3 | export const staticConfig = {
4 | rootPath: path.join(__dirname, '../../../../..', 'apps'),
5 | serveRoot: '/',
6 | renderPath: '/',
7 | };
8 |
--------------------------------------------------------------------------------
/BE/test/mock-service/mock-config-service.ts:
--------------------------------------------------------------------------------
1 | export class MockConfigService {
2 | private ENV = {
3 | CDN_ENDPOINT: 'http://cdn.com',
4 | };
5 | get(key: string) {
6 | return this.ENV[key];
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/iOS/FMImageProvider/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/Feature/Chart/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Core/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Data/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/Feature/Category/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/Feature/MyPage/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/Feature/Service/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Login/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Network/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Social/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/TabBar/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Timer/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/BE/test/jest-e2e.json:
--------------------------------------------------------------------------------
1 | {
2 | "moduleFileExtensions": ["js", "json", "ts"],
3 | "rootDir": ".",
4 | "testEnvironment": "node",
5 | "testRegex": ".e2e-spec.ts$",
6 | "transform": {
7 | "^.+\\.(t|j)s$": "ts-jest"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Social/Sources/Social/Model/FriendUser.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by 권승용 on 6/2/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public enum Section: CaseIterable {
11 | case main
12 | }
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/ios-feature-template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: iOS Feature Template
3 | about: iOS Feature Template
4 | title: ''
5 | labels: iOS
6 | assignees: ericKwon95, leemhyungyu, nemanjabenkovic
7 |
8 | ---
9 |
10 | ## Why
11 |
12 | ## Todo
13 | -
14 | -
15 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Application/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // FlipMate
4 | //
5 | // Created by 권승용 on 11/9/23.
6 | //
7 |
8 | import UIKit
9 |
10 | @main
11 | class AppDelegate: UIResponder, UIApplicationDelegate {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Network/Sources/Network/Responsable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Responsable.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/15/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol Responsable {
11 | associatedtype Response: Decodable
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png
--------------------------------------------------------------------------------
/BE/src/common/config/swagger.config.ts:
--------------------------------------------------------------------------------
1 | import { DocumentBuilder } from '@nestjs/swagger';
2 |
3 | export const swaggerConfig = new DocumentBuilder()
4 | .setTitle('StudyLog API')
5 | .setDescription('StudyLog 애플리케이션 API 문서')
6 | .setVersion('2.0')
7 | .addBearerAuth()
8 | .build();
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/BE/src/users/dto/response/nickname-validation.dto.ts:
--------------------------------------------------------------------------------
1 | import { ApiProperty } from '@nestjs/swagger';
2 |
3 | export class NicknameValidationDto {
4 | @ApiProperty({
5 | type: 'boolean',
6 | example: true,
7 | description: '가능한지 여부',
8 | })
9 | is_unique: boolean;
10 | }
11 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Authentication/SignOutUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SignOutUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol SignOutUseCase {
11 | func signOut()
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/StudingPingUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StudingPingUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol StudingPingUseCase {
11 | func studingPing() async throws
12 | }
13 |
--------------------------------------------------------------------------------
/BE/src/users/dto/response/user-profile.dto.ts:
--------------------------------------------------------------------------------
1 | import { ApiProperty } from '@nestjs/swagger';
2 |
3 | export class UserProfileDto {
4 | @ApiProperty({
5 | type: 'string',
6 | example: 'https://imgurl.com/path/file.png',
7 | description: '유저 프로필 사진',
8 | })
9 | image_url: string;
10 | }
11 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Core/Sources/Core/Constant/NotificationName.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NotificationName.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/17/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public enum NotificationName {
11 | public static let signOut = NSNotification.Name("signOut")
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon 1.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon@2x.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Authentication/WithdrawUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WithdrawUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol WithdrawUseCase {
11 | func withdraw() async throws
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_Dark_icon.imageset/FlipMate_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_Dark_icon.imageset/FlipMate_icon.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon@3x 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon@3x 1.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon_dark.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Data/Sources/Data/Network/DataMapping/TimerScene/TimeZoneRequestDTO.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TimeZoneRequestDTO.swift
3 | // FlipMate
4 | //
5 | // Created by 임현규 on 2023/12/13.
6 | //
7 |
8 | import Foundation
9 |
10 | struct TimeZoneRequestDTO: Encodable {
11 | let timezone: String
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Extension/UICollectionReusableView++Extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UICollectionReusableView++Extension.swift
3 | // FlipMate
4 | //
5 | // Created by 임현규 on 2023/11/20.
6 | //
7 |
8 | import UIKit
9 |
10 | extension UICollectionReusableView: ReusableView {}
11 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_Dark_icon.imageset/FlipMate_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_Dark_icon.imageset/FlipMate_icon@2x.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_Dark_icon.imageset/FlipMate_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_Dark_icon.imageset/FlipMate_icon@3x.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon_dark@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon_dark@2x.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon_dark@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcampwm2023/iOS06-FlipMate/HEAD/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/FlipMate_icon.imageset/FlipMate_icon_dark@3x.png
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/PatchTimeZoneUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PatchTimeZoneUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol PatchTimeZoneUseCase {
11 | func patchTimeZone(date: Date) async throws
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Data/Sources/Data/Network/DataMapping/StatusResponseDTO.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StatusResponseDTO.swift
3 | // FlipMate
4 | //
5 | // Created by 권승용 on 11/22/23.
6 | //
7 |
8 | import Foundation
9 |
10 | struct StatusResponseDTO: Decodable {
11 | let statusCode: Int
12 | let message: String
13 | }
14 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Category/DeleteCategoryUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DeleteCategoryUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol DeleteCategoryUseCase {
11 | func deleteCategory(of id: Int) async throws
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Category/ReadCategoryUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ReadCategoryUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol ReadCategoryUseCase {
11 | func readCategory() async throws -> [StudyCategory]
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Core/Sources/Core/Error/APIError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // APIError.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/14/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public enum APIError: Error {
11 | case duplicatedCategoryName
12 | case duplicatedNickName
13 | case imageNotSafe
14 | case unknown
15 | }
16 |
--------------------------------------------------------------------------------
/BE/src/common/config/jwt.config.ts:
--------------------------------------------------------------------------------
1 | import { ConfigService } from '@nestjs/config';
2 | import { ENV } from '../const/env-keys.const';
3 |
4 | export const jwtConfig = (configService: ConfigService) => ({
5 | secret: configService.get(ENV.JWT_SECRET),
6 | signOptions: { expiresIn: configService.get(ENV.JWT_EXPIRES_IN) },
7 | });
8 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/DefaultProfileImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "DefaultProfileImage.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Authentication/GoogleLoginUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GoogleLoginUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol GoogleLoginUseCase {
11 | func googleLogin(accessToken: String) async throws -> User
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Network/Sources/Network/HTTPMethod.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HTTPMethod.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/15/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public enum HTTPMethod: String {
11 | case get = "GET"
12 | case post = "POST"
13 | case delete = "DELETE"
14 | case patch = "PATCH"
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FMImageProvider/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/iOS/FMImageProvider/Sources/FMImageProvider/Utils/Logger.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by 권승용 on 3/11/24.
6 | //
7 |
8 | import Foundation
9 | import OSLog
10 |
11 | enum FMLogger {
12 | static let general = Logger(subsystem: Bundle.main.bundleIdentifier ?? "FMImageProvider", category: "FMImageProvider")
13 | }
14 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Extension/UIImage++Extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage++Extension.swift
3 | //
4 | //
5 | // Created by 임현규 on 5/17/24.
6 | //
7 |
8 | import UIKit
9 |
10 | extension UIImage {
11 | public static let profileImage = UIImage(named: "DefaultProfileImage", in: Bundle.module, with: nil)
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Authentication/AppleLoginUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppleLoginUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol AppleLoginUseCase {
11 | func appleLogin(accessToken: String, userID: String) async throws -> User
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Category/CreateCategoryUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CreateCategoryUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol CreateCategoryUseCase {
11 | func createCategory(name: String, colorCode: String) async throws -> Int
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Chart/FetchDailyChartUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FetchDailyChartUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol FetchDailyChartUseCase {
11 | func fetchDailyChartLog(at date: Date) async throws -> CategoryChartLog
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Chart/FetchWeeklyChartUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FetchWeeklyChartUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol FetchWeeklyChartUseCase {
11 | func fetchWeeklyChartLog(at date: Date) async throws -> WeeklyChartLog
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/FlipMate.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.applesignin
6 |
7 | Default
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/iOS/FMImageProvider/Sources/FMImageProvider/Protocols/MemoryCacheable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageCacheable.swift
3 | //
4 | //
5 | // Created by 권승용 on 1/22/24.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol MemoryCacheable {
11 | func save(key url: String, imageData: Data)
12 | func load(key url: String) throws -> Data
13 | func removeAll()
14 | }
15 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/GetStudyLogUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GetStudyLogUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol GetStudyLogUseCase {
14 | func getStudyLog() -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/GetUserInfoUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GetUserInfoUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol GetUserInfoUseCase {
14 | func getUserInfo() -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Core/Sources/Core/Extension/CGFloat++Extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CGFloat++Extension.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/14/24.
6 | //
7 |
8 | import Foundation
9 |
10 | extension CGFloat {
11 | /// CGFloat 값을 라디안 값으로 변환하여 리턴합니다.
12 | public func toRadian() -> CGFloat {
13 | return self * 2 * CGFloat.pi
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Category/UpdateCategoryUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UpdateCategoryUseCsae.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol UpdateCategoryUseCsae {
11 | func updateCategory(of id: Int, newName: String, newColorCode: String) async throws
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/ValidateNicknameUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ValidateNicknameUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | import Core
11 |
12 | public protocol ValidateNicknameUseCase {
13 | func isNickNameValid(_ nickName: String) -> NickNameValidationState
14 | }
15 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Social/SetupProfileInfoUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SetupProfileInfoUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol SetupProfileInfoUseCase {
11 | func setupProfileInfo(nickName: String, profileImageData: Data) async throws -> UserInfo
12 | }
13 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "AppIcon.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Chart/LoadChartUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LoadChartUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol LoadChartUseCase {
14 | func loadChart(at id: Int) -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Social/GetFriendsUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GetFriendsUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol GetFriendsUseCase {
14 | func getMyFriend(date: Date) -> AnyPublisher<[Friend], NetworkError>
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/RepositoryProtocols/ChartRepository.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ChartRepository.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/18/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol ChartRepository {
11 | func fetchDailyLog(date: Date) async throws -> CategoryChartLog
12 | func fetchWeeklyLog() async throws -> WeeklyChartLog
13 | }
14 |
--------------------------------------------------------------------------------
/iOS/FMImageProvider/Sources/FMImageProvider/Protocols/DiskCacheable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DiskCacheable.swift
3 | //
4 | //
5 | // Created by 권승용 on 1/22/24.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol DiskCacheable {
11 | func save(key url: String, imageData: Data) async throws
12 | func load(key url: String) async throws -> Data?
13 | func removeAll() async throws
14 | }
15 |
--------------------------------------------------------------------------------
/iOS/FMImageProvider/Sources/FMImageProvider/Protocols/ImageDownloadable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageDownloadable.swift
3 | //
4 | //
5 | // Created by 권승용 on 1/23/24.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol ImageDownloadable {
11 | func fetchImage(from url: URL, completion: @escaping (Result) -> ())
12 | func fetchImage(from url: URL) async throws -> Data
13 | }
14 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Friend/FollowFriendUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FollowFriendUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol FollowFriendUseCase {
14 | func follow(at nickname: String) -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Friend/UnfollowFriendUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnfollowFriendUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol UnfollowFriendUseCase {
14 | func unfollow(at id: Int) -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FMImageProvider/Tests/FMImageProviderTests/Utils/Logger.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by 권승용 on 3/19/24.
6 | //
7 |
8 | import Foundation
9 | import OSLog
10 | @testable import FMImageProvider
11 |
12 | extension FMLogger {
13 | static let test = Logger(subsystem: Bundle.main.bundleIdentifier ?? "FMImageProvider", category: "FMImageProviderTests")
14 | }
15 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Core/Sources/Core/Extension/String++Extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // String++Extension.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/14/24.
6 | //
7 |
8 | import Foundation
9 |
10 | extension String {
11 | public func toDate(_ dateFormat: Date.FMDateFormmat) -> Date? {
12 | return DateFormatter.FMDateFormat(dateFormat: dateFormat).date(from: self)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Social/FetchFriendsUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FetchFriendsUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol FetchFriendsUseCase {
14 | func fetchMyFriend(date: Date) -> AnyPublisher<[FriendStatus], NetworkError>
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Friend/SearchFriendUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SearchFriendUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol SearchFriendUseCase {
14 | func search(at nickname: String) -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Timer/StartTimerUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StartTimerUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol StartTimerUseCase {
14 | func startTimer(startTime: Date, categoryId: Int?) -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Network/Sources/Network/HTTPHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HTTPHeader.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/15/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public struct HTTPHeader {
11 | var value: String
12 | var field: String
13 |
14 | public init(value: String, field: String) {
15 | self.value = value
16 | self.field = field
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/RepositoryProtocols/StudyLogRepository.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StudyLogRepository.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/18/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol StudyLogRepository {
14 | func getUserInfo() -> AnyPublisher
15 | func studingPing() async throws
16 | }
17 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/UseCaseProtocols/Timer/FinishTimerUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FinishTimerUseCase.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/20/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol FinishTimerUseCase {
14 | func finishTimer(endTime: Date, learningTime: Int, categoryId: Int?) -> AnyPublisher
15 | }
16 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Timer/Sources/Timer/Model/DeviceOrientation.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DeviceOrientation.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/30/24.
6 | //
7 |
8 | import Foundation
9 |
10 | public enum DeviceOrientation: Int {
11 | case unknown
12 | case portrait
13 | case portraitUpsideDown
14 | case landscapeLeft
15 | case landscapeRight
16 | case faceUp
17 | case faceDown
18 | }
19 |
--------------------------------------------------------------------------------
/BE/src/mates/dto/response/status-message.dto.ts:
--------------------------------------------------------------------------------
1 | import { ApiProperty } from '@nestjs/swagger';
2 |
3 | export class StatusMessageDto {
4 | @ApiProperty({
5 | type: 'number',
6 | example: 200,
7 | description: '상태 코드',
8 | })
9 | statusCode: number;
10 |
11 | @ApiProperty({
12 | type: 'string',
13 | example: '성공적으로 삭제되었습니다.',
14 | description: '메시지',
15 | })
16 | message: string;
17 | }
18 |
--------------------------------------------------------------------------------
/iOS/FlipMate/FlipMate/Domain/Sources/Domain/RepositoryProtocols/UserInfoRepository.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserInfoRepository.swift
3 | //
4 | //
5 | // Created by 권승용 on 5/18/24.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | import Core
12 |
13 | public protocol UserInfoRepository {
14 | func getUserInfo() -> AnyPublisher
15 | func patchTimeZone(date: Date) async throws
16 | }
17 |
--------------------------------------------------------------------------------
/BE/src/categories/dto/request/create-categories.dto.ts:
--------------------------------------------------------------------------------
1 | import { ApiProperty } from '@nestjs/swagger';
2 |
3 | export class CategoryCreateDto {
4 | @ApiProperty({
5 | type: 'string',
6 | example: '백준',
7 | description: '카테고리 이름',
8 | })
9 | name: string;
10 |
11 | @ApiProperty({
12 | type: 'string',
13 | example: 'FFFFFFFF',
14 | description: '카테고리 색상',
15 | })
16 | color_code: string;
17 | }
18 |
--------------------------------------------------------------------------------
/BE/src/categories/dto/request/update-categories.dto.ts:
--------------------------------------------------------------------------------
1 | import { ApiProperty } from '@nestjs/swagger';
2 |
3 | export class CategoryUpdateDto {
4 | @ApiProperty({
5 | type: 'string',
6 | example: '백준',
7 | description: '카테고리 이름',
8 | })
9 | name: string;
10 |
11 | @ApiProperty({
12 | type: 'string',
13 | example: 'FFFFFFFF',
14 | description: '카테고리 색상',
15 | })
16 | color_code: string;
17 | }
18 |
--------------------------------------------------------------------------------
/BE/test/mock-service/mock-user-service.ts:
--------------------------------------------------------------------------------
1 | import { UsersModel } from 'src/users/entity/users.entity';
2 | import usersData from '../mock-table/users.json';
3 |
4 | export class MockUsersService {
5 | private data: UsersModel[] = usersData as UsersModel[];
6 | findUserById(user_id: number): Promise