Releases: 42Statistics/42Stat-Backend
Releases ยท 42Statistics/42Stat-Backend
v0.5.0
์ ๊ท ๊ธฐ๋ฅ โจ
- ๋ก๊ทธ์ธ ๊ด๋ จ mutation ์ถ๊ฐ
type LinkedAccount {
platform: String!
id: String!
email: String
linkedAt: DateTime!
}
type Account {
userId: Int!
linkedAccounts: [LinkedAccount!]!
}
type LoginSuccess {
accessToken: String!
refreshToken: String!
userId: Int!
message: String!
}
type LoginNotLinked {
message: String!
}
union LoginResult = LoginSuccess | LoginNotLinked
type GoogleLoginInput {
clientId: String!
credential: String!
}
- ftLogin ์ถ๊ฐ
mutation ftLogin (ftCode: "example"): LoginSuccess!
- googleLogin ์ถ๊ฐ
mutation googleLogin (google: GoogleLoginInput, ftCode: "example"): LoginResult!
- linkGoogle ์ถ๊ฐ
mutation linkGoogle (google: GoogleLoginInput): Account!
- unlinkAccount ์ถ๊ฐ
mutation unlinkAccount (targetPlatform: String!): Account!
- refreshToken ์ถ๊ฐ
mutation refreshToken (refreshToken: String!): LoginSuccess!
- logout ์ถ๊ฐ
mutation logout: Int!
- deleteAccount ์ถ๊ฐ
mutation deleteAccount: Int!
- getSetting ์ถ๊ฐ
getSetting: Account
- getPersonalVersus ์ถ๊ฐ
# login, userId ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค
getPersonalVersus (login: "example", userId: 12345) {
levelRank {
rank
value
}
totalScoreRank {
rank
value
}
totalEvalCountRank {
rank
value
}
currWeekExpIncreamentRank {
rank
value
}
currWeekScoreRank {
rank
value
}
currWeekEvalCountRank {
rank
value
}
}
๊ธฐ์กด api ๋ณ๊ฒฝ ์ฌํญ โป๏ธ
- getPersonalGeneral ์ character ๋ฅผ ๋ฐฑ์๋์์ ์บ๋ฆญํฐ๊น์ง ํน์ ํด์ ๋ฐํํ๋๋ก ์์
getPersonalGeneral (login: "example") {
character {
name
types {
name
description
color
}
imgUrl
}
}
- getPersonalEval ์ totalCount ๋ฅผ countByDateTemplate ๊ณผ ํตํฉ, ๊ธฐ์กด totalCount ๋ ๋ค์ release ์ ์ญ์ ์์
- graphql complexity ๋ฅผ ํตํด, ํ๋ฒ์ ๋๋ฌด ๋ง์ field ๋ฅผ ์์ฒญํ๋ฉด ์๋ฌ๋ฅผ ๋ฐํํ๋๋ก ์์
๋ฒ๊ทธ ์์ ๐
์ธ๋ถ ๋ณ๊ฒฝ ์ฌํญ ๐
- feat โจ complexity by @jpham005 in #228
- refactor โป๏ธ character by @jpham005 in #231
- feat โจ versus by @jpham005 in #233
- feat โจ login & setting page by @niamu01 in #218
- refactor: โป๏ธ ์ฌ๋ฅ ์ต๋ ๊ตฌ์ญ์ ์ ์ ๋ถํฌ๊ฐ ๊ณผ๋ํ๊ฒ ์ ์ ๋ฌธ์ ์์ by @jpham005 in #234
- refactor: โป๏ธ ์บ์ ํ ํ์ ์๋ ๋ถ๋ถ private ํจ์๋ก ๋ณ๊ฒฝ, cache max, ttl ์ค์ ๋ณ๊ฒฝ by @jpham005 in #236
- chore: ๐ v0.5.0 by @jpham005 in #237
Full Changelog: v0.4.0...v0.5.0
v0.4.0
์ ๊ท ๊ธฐ๋ฅ โจ
- ์ด๋ช ์ ์ฅ๋ api ๊ตฌํ
getPersonalEval (login:"example") {
destinyRanking {
userPreview {
id
login
imgUrl
}
value
rank
}
}
- getProjectInfo ์ url ์ถ๊ฐ
getProjectInfo (projectName: "Libft") {
url
}
๊ธฐ์กด api ๋ณ๊ฒฝ ์ฌํญ โป๏ธ
- user ์ coalition ์ ๋ณด๋ฅผ nullable ํ๊ฒ ๋ณ๊ฒฝ #215
- getPersonalGeneral ์ UserProfile ์ coalition ์ nullable ํ๊ฒ ๋ณ๊ฒฝ
- getPersonalGeneral ์ scoreInfo ์ค rankInCoalition ์ nullable ํ๊ฒ ๋ณ๊ฒฝ
@ObjectType()
export class UserProfile {
// ...
@Field({ nullable: true })
coalition?: Coalition;
}
@ObjectType()
export class UserScoreInfo {
// ...
@Field({ nullable: true })
rankInCoalition?: number;
}
- getPersonalGeneral ์ levelRecords ๊ด๋ จ๋ ๋ถ๋ถ์ #188 ๋ ผ์ ๊ฒฐ๊ณผ๋๋ก ๋ณ๊ฒฝ (๊ธฐ์กด ์ ์ฒด ๋ฉค๋ฒ ํ๊ท ์ญ์ , ๊ธฐ์ ๋ณ ๋ฐ์ดํฐ ์ถ๊ฐ)
getPersonalGeneral (login:"example") {
promoLevelRecords {
monthsPassed
level
}
promoMemberLevelRecords {
monthsPassed
level
}
}
- getPersonalGeneral ์ character ์์
UserRank
๋ฅผ ๋ฐํํ๋ ๋ถ๋ถ์UserRankWithCount
๋ฅผ ๋ฐํํ๋๋ก ๋ณ๊ฒฝ #206
getPersonalGeneral (login: "example") {
character {
effort {
logtimeRank {
# ...UserRank
totalUserCount
}
}
}
}
- user, project search ์์ ์ต์ ์ ๋ ฅ ๊ธ์ ์์ ์ต๋ ์ ๋ ฅ ๊ธ์ ์ ์ถ๊ฐ
- getHomeTeam ์ currRegisterCount ๋ฅผ ์ง๊ณํ ๋, ๊ฐฑ์ ์ด ์ค๋๋์ ์ด๋ฃจ์ด์ง์ง ์์ ํ๋ค์ ์ ์ธ
- ๊ฐ์ข
๋ฐฐ์ด ๋ฐํํ๋ query ์์ ๋ถํ์ํ๋
nullable: 'items'
์ ๊ฑฐ #205
๋ฒ๊ทธ ์์ ๐
- userLevelRecords ์์, ๋ ๋ฒจ ๋ณ๋์ด ์๋ ์ํ์์ ์๊ฐ์ ๋ณด๋ธ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ๋๋ฝ๋๋ ๋ฌธ์ ์์
- logtime ๊ด๋ จ๋ ๋ก์ง์์, ์์ง ์ ์ ์ข ๋ฃํ์ง ์์ ์ ์ ์ ๊ฒฝ์ฐ์ ๋ํ ์ฒ๋ฆฌ ์ถ๊ฐ #198 #199
- ์ง์ exam ์ ์ ๋๋ก ๊ฐ์ ธ์ค์ง ๋ชปํ๋ ๋ฌธ์ ์์ #190
- ์ผ๋ถ cache ๊ฐ ์ฌ๋ฐ๋ฅด์ง ์๊ฒ ์๋ํ๋ ๋ฌธ์ ์์ #191
- ์๋ชป๋
nullable: 'items'
์ค์ ์ ๊ฑฐ #205 - ํ๊ฐ ๊ธฐ๋ก์ด ์๋ user ์ ๊ธฐ๋ก์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ์์ #216
์ธ๋ถ ๋ณ๊ฒฝ ์ฌํญ ๐
- feat: โจ destiny user rank by @niamu01 in #192
- fix: ๐ examresult by @niamu01 in #194
- refactor โป๏ธ curr register count class validator by @niamu01 in #197
- fix: ๐ logtime service ๋ฒ๊ทธ ์์ by @jpham005 in #201
- feat โจ graphql error by @niamu01 in #202
- refactor โป๏ธ search by @jpham005 in #211
- feat: โจ projectInfo ์ url ์ถ๊ฐ by @jpham005 in #212
- feat: โจ ๊ธฐ์ ์ ์ฒด ํ๊ท , ๊ธฐ์ ๋ฉค๋ฒ ํ๊ท , ์ ์ ํ๊ท ๋ ๋ฒจ ๊ทธ๋ํ ๊ตฌํ by @jpham005 in #213
- refactor โป๏ธ cache by @jpham005 in #217
- fix: ๐ ์บ์ ์์ ์ค ๊ธฐ์กด ๋ก์ง์์ ์ ์ ํ ๋ฐ์๋์ง ์์ ๋ถ๋ถ ์์ by @jpham005 in #219
- feat: โจ cache by @jpham005 in #220
- feat: โจ character usercount by @jpham005 in #221
- fix โป๏ธ ๐ ๐ prepare v0.4.0 by @jpham005 in #224
Full Changelog: v0.3.0...v0.4.0
v0.3.0
์ ๊ท ๊ธฐ๋ฅ โจ
- ๋ฎ์ ์บ๋ฆญํฐ ์นด๋ ์ถ๊ฐ
getPersonalGeneral {
character {
effort {
logtimeRank {
rank
value
userPreview {
id
}
}
evalCountRank {
rank
value
}
examTryCount
projectTryCount
}
talent {
levelRank {
rank
value
}
examOneshotRate {
total
fields {
key
value
}
}
projectOneshotRate {
total
fields {
key
value
}
}
outstandingRate {
total
fields {
key
value
}
}
}
}
}
๊ธฐ์กด api ๋ณ๊ฒฝ ์ฌํญ โป๏ธ
lastExamResult
์์recentExamResult
์ผ๋ก ์ด๋ฆ ๋ณ๊ฒฝ- ๋ค๋ฅธ Rate๋ฅผ ๋ฐํํ๋ ์ฟผ๋ฆฌ๋ค๊ณผ ํ์ ์ ๋ง์ถค
- after์ธ์๋ก ์ต๊ทผ n๋ฒ์งธ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋๋ก ๊ตฌํ
getHomeTeam {
recentExamResult(after:1){
start
end
data{
resultPerRank {
rank
rate {
total
fields {
key
value
}
}
}
beginAt
endAt
location
maxPeople
name
nbrSubscribers
}
}
}
getProjectInfo
์์ difficulty ๋ฅผ nullable ํ๊ฒ ๋ณ๊ฒฝ #187
getProjectInfo(projectName: "Hive Internship") {
difficulty # nullable
}
- cache provider ๋ฅผ redis ์์ in-memory ๋ก ๋ณ๊ฒฝ
๋ฒ๊ทธ ์์ ๐
- ์ ์์ด ๋๋์ง ์์ logtime ์ด ์ ๋๋ก ์ง๊ณ๋์ง ์๋ ํ์ ์์ #175
- project session ์ difficulty ๊ฐ null ์ธ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ํ์ ์์ #187
- eval log ์ค๋ฅ ์์ #174 #176
- leaderboard eval count ์ cache ๊ฐ ์ ๋๋ก ์ฐ๊ฒฐ๋์ด ์์ง ์๋ ๋ฌธ์ ์์ #177
์ธ๋ถ ๋ณ๊ฒฝ ์ฌํญ ๐
- feat: โจ examResult ์ถ๊ฐ by @niamu01 in #180
- feat โจ character by @jpham005 in #181
- fix: ๐ rank๊ฐ id์์ ์ค์ exam rank๋ก ๋ฐ๊พธ๊ธฐ by @niamu01 in #185
- refactor โป๏ธ cache by @jpham005 in #186
- fix ๐ bugs by @jpham005 in #189
Full Changelog: v0.2.0...v0.3.0
v0.2.0
์ ๊ท ๊ธฐ๋ฅ โจ
- ๊ฐ์ธํ ์นด๋ ์ถ๊ฐ
getMyInfo {
userPreview {
id
login
imgUrl
}
recentValidatedTeam {
status
lastEventTime
projectPreview {
id
name
url
}
}
isNewMember
blackholedAt
experienceRank
scoreRank
evalCountRank
}
- project ํ์ด์ง ์ถ๊ฐ
getProjectInfo(projectName: "webserv") {
id
name
objectives
skills
description
minUserCount
maxUserCount
estimateTime
difficulty
currRegisteredTeamCount
closedTeamCount
averagePassFinalMark
validatedRate {
total
fields {
key
value
}
}
}
- landing ํ์ด์ง ์ถ๊ฐ
getLanding {
daysAfterBeginAt
aliveCount
blackholedCount
memberCount
evalCount
trendingProject {
projectPreview {
id
name
url
}
rank
value
}
}
- level ์ฆ๊ฐ ๊ทธ๋ํ ์ถ๊ฐ
getPersonalGeneral {
userLevelRecords {
monthsPassed
level
}
memberLevelRecords {
monthsPassed
level
}
}
- home page (team) ์ฟผ๋ฆฌ ์ถ๊ฐ
getHomeTeam {
currRegisteredCountRanking {
projectPreview {
id
name
url
}
rank
value
}
}
๊ธฐ์กด api ๋ณ๊ฒฝ ์ฌํญ โป๏ธ
- DateTemplate ์ TOTAL ์ถ๊ฐ, ์ด์ ๋ฐ๋ผ total ๊ณผ byDateTemplate ์ด ๋ฐ๋ก ์๋ field ๋ค์ ๋ชจ๋ byDateTemplate ์ผ๋ก ๋ณํฉ
- personal ํ์ด์ง ์ฟผ๋ฆฌ ์ด๋ฆ ์์ (getPersonalGeneralPage => getPersonalGeneral)
- getPersonalEval ์ eval link ์ญ์
- getPersonalEval ์ lastComment => recentComment ๋ก ์์
getPersonalEval {
recentComment
}
- getPersonalGeneral ์ teamInfo ์์, ์ ์ ์ ํ ๋ชฉ๋ก์ด ๋ง์ง๋ง ์ด๋ฒคํธ ๋ฐ์ ์๊ฐ์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ๋๊ฒ ๋ณ๊ฒฝ
- getHomeUser ์ userCountPerLevel ํ๋๋ช ์์
- getHomeUser ์ activeUserCountRecords => aliveUserCountRecords ๋ก ์์
getHomeUser {
aliveUserCountRecords {
at
value
}
userCountPerLevel {
value
level
}
}
- getHomeCoalition ์ tigPerCoalition ์ DateTemplete ์ ๋ฐ๋๋ก ๋ณ๊ฒฝ
getHomeCoalition {
tigCountPerCoalitionByDateTemplate(dateTemplate: CURR_MONTH) {
data {
value
coalition {
name
}
}
start
end
}
}
- getEvalLog ์
correctedsReview
๋ฅผ nullable ํ๊ฒ ๋ณ๊ฒฝ- ํผํ๊ฐ์๊ฐ feedback ์ ์์ฑํ์ง ์๊ณ ๋ธ๋ํ์ ๊ฐ๋ ๋ฑ๋ฑ์ ๊ฒฝ์ฐ์๋, ํ๊ฐ ๊ฒ์์ด ์๋ํ๊ฒ ํ๊ธฐ ์ํจ
- ์บ์ฑ ์ถ๊ฐ
๋ฒ๊ทธ ์์ ๐
- leaderboard score ์์ ์๋ชป๋ ์ฟผ๋ฆฌ๋ฌธ ์์ #161
- bucket ์ฌ์ฉํ๋ ์๋ชป๋ ์ฟผ๋ฆฌ๋ฌธ ์์ (byDateTemplate ๊ด๋ จ ์ฟผ๋ฆฌ๋ค์ด ์ํฅ์ ๋ฐ์ต๋๋ค. #164)
- blackholed user count ๊ฐ ์๋ชป ์๋ํ๊ณ ์๋ ๋ถ๋ถ ์์
- search ์ regex ๋ฌธ๋ฒ ํน์๋ฌธ์๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ์์
์ธ๋ถ ๋ณ๊ฒฝ ์ฌํญ ๐
- feat โจ my info by @jpham005 in #145
- feat: โจ landing page ์ ์ by @jpham005 in #147
- feat โจ level records by @jpham005 in #149
- feat โจ cache module by @jpham005 in #157
- fix ๐ dependency by @jpham005 in #159
- feat โจ scale team cache by @jpham005 in #162
- feat โจ score cache by @jpham005 in #163
- feat โจ exp cache by @jpham005 in #165
- fix: ๐ bucket ์์ default ๊ฐ์ ๋ํด ์ ์ ํ ์ฒ๋ฆฌ๋์ง ์๋ ์ค๋ฅ ์์ by @jpham005 in #166
- fix: ๐ prepare v0.2.0 by @jpham005 in #173
Full Changelog: v0.1.0...v0.2.0
v0.1.0
์ธ๋ถ ๋ณ๊ฒฝ ์ฌํญ ๐
- feat: โจ User api ์ด์ ์์ฑ by @jpham005 in #3
- Feat/team api by @jpham005 in #6
- Feat/scale team api by @jpham005 in #11
- Feat/bff api by @jpham005 in #14
- refactor: โป๏ธ common module ์์ฑ, ํ์ผ ๊ตฌ์กฐ ๋ณ๊ฒฝ by @jpham005 in #16
- fix: ๐ id๊ฐ ๋ค๋ฅด๊ฒ ์ค์ by @niamu01 in #18
- feat: โจ add more mock data by @niamu01 in #19
- fix: ๐ UserProfile์์ ๋๋ฝ๋ ๋ฐ์ดํฐ ์ถ๊ฐ, grade ํ์ ์ non-null๋ก ์์ by @jpham005 in #22
- feat: โจscale teams service ๋ก์ง ์ถ๊ฐ by @niamu01 in #27
- refactor: โป๏ธ common module by @jpham005 in #29
- refactor: โป๏ธ mongoose aggregation ๋์ , ์ฑ๋ฅ ์ต์ ํ by @jpham005 in #32
- feat: โจ scale team, eval log by @jpham005 in #33
- fix: ๐ temp data ์ง์์ ์๋๋ ๋ถ๋ถ ์์ by @jpham005 in #37
- feat: โจ project module ์ถ๊ฐ by @jpham005 in #35
- feat: โจ ๋ฐฐํฌ ์ค์ ๋ฐ ์๋ํ by @niamu01 in #39
- Revert "feat: โจ ๋ฐฐํฌ ์ค์ ๋ฐ ์๋ํ" by @niamu01 in #43
- feat: โจ githubaction by @niamu01 in #42
- fix: ๐ db connection string local ์ฉ ์ผ๋ก ์์ by @jpham005 in #45
- feat: โจ score by @jpham005 in #40
- refactor: โป๏ธ Util.Time ํ์ฅ์ฑ ์๋๋ก ๊ฐํธ, ๊ด๋ จ ๋ก์ง๋ค ์์ by @jpham005 in #48
- refactor: โป๏ธ docdb ํธํ์ฑ ๋ฐ env์ ๋ฐ์ดํธ by @niamu01 in #47
- hotfix: ๐ review ๊ธธ์ด ๊ตฌํ๋ ๋ถ๋ถ aggregation ์์ by @jpham005 in #51
- fix: ๐ $first ์ฐ์ฐ์ ๊ต์ฒด by @jpham005 in #54
- dev main ์ผ๋ก ๋ณํฉ by @jpham005 in #70
- Style/rename type by @niamu01 in #73
- feat: โจ redis, cron ์ถ๊ฐ by @jpham005 in #76
- chore: ๐งฑ ์ค ์ฌ์ฉ db ๋ก ์์ , port 80 ์ผ๋ก ์์ by @jpham005 in #77
- feat: โจ exam api by @jpham005 in #83
- feat: โจ teams by @jpham005 in #82
- feat: โจ cursus user by @niamu01 in #87
- refactor: โป๏ธ cursus_user ์์์ ํ๋ก ํธ ์์ฒญ ์ฌํญ by @niamu01 in #100
- fix: ๐ personalEval์ login, uid๋ก ๊ฒ์ํ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ by @niamu01 in #101
- feat: โจ locations by @niamu01 in #102
- style: ๐จ folder ๊ตฌ์กฐ ๋ณ๊ฒฝ by @niamu01 in #108
- refactor โป๏ธ packages by @jpham005 in #116
- style ๐จ naming by @jpham005 in #117
- refactor โป๏ธ use date range by @niamu01 in #118
- refactor โป๏ธ modulize by @jpham005 in #123
- fix: ๐ leaderboard ์์ ์ฌ์ฉํ๋ ํ์ ์ UserRanking => LeaderboardRanking โฆ by @jpham005 in #124
- feat โจ pagination rebased by @niamu01 in #127
- refactor: โป๏ธ Object Time => Class StatDate by @jpham005 in #128
- feat โจ score rank by @jpham005 in #130
- style ๐จ naming convention by @jpham005 in #132
- refactor โป๏ธ cursus user service by @jpham005 in #134
- feat โจ scale team by @jpham005 in #136
- feat โจ user state by @jpham005 in #139
- feat: โจ ExecutionContext by @niamu01 in #140
- feat โจ scale team by @jpham005 in #141
- refactor โป๏ธ types by @jpham005 in #142
- feat: โจ user team info ์ถ๊ฐ by @jpham005 in #143
Full Changelog: https://github.com/42Statistics/42Stat-Backend/commits/v0.1.0