Skip to content

Commit

Permalink
feat(web): support multiple local novel favored (#89)
Browse files Browse the repository at this point in the history
Co-authored-by: FishHawk <[email protected]>
  • Loading branch information
153264 and FishHawk authored Jun 22, 2024
1 parent 1f160ff commit 0a551ed
Show file tree
Hide file tree
Showing 31 changed files with 427 additions and 249 deletions.
14 changes: 7 additions & 7 deletions server/src/main/kotlin/api/RouteUserFavoredWeb.kt
Original file line number Diff line number Diff line change
Expand Up @@ -131,21 +131,21 @@ class UserFavoredWebApi(
suspend fun createFavored(
user: User,
title: String,
) {
): String {
if (title.length > 20) throwBadRequest("收藏夹标题至多为20个字符")

val (favoredWeb) = userFavoredRepo.getFavoredList(user.id)!!
if (favoredWeb.size >= 10) throwBadRequest("收藏夹最多只能创建10个")

val newFavoredWeb = favoredWeb.toMutableList()
val id = UUID.randomUUID().toString()
newFavoredWeb.add(UserFavored(id = id, title = title))

userFavoredRepo.updateFavoredWeb(
userId = user.id,
favored = favoredWeb + listOf(
UserFavored(
id = UUID.randomUUID().toString(),
title = title,
)
)
favored = newFavoredWeb,
)
return id
}

suspend fun updateFavored(
Expand Down
14 changes: 7 additions & 7 deletions server/src/main/kotlin/api/RouteUserFavoredWenku.kt
Original file line number Diff line number Diff line change
Expand Up @@ -128,21 +128,21 @@ class UserFavoredWenkuApi(
suspend fun createFavored(
user: User,
title: String,
) {
): String {
if (title.length > 20) throwBadRequest("收藏夹标题至多为20个字符")

val (_, favoredWenku) = userFavoredRepo.getFavoredList(user.id)!!
if (favoredWenku.size >= 10) throwBadRequest("收藏夹最多只能创建10个")

val newFavoredWenku = favoredWenku.toMutableList()
val id = UUID.randomUUID().toString()
newFavoredWenku.add(UserFavored(id = id, title = title))

userFavoredRepo.updateFavoredWenku(
userId = user.id,
favored = favoredWenku + listOf(
UserFavored(
id = UUID.randomUUID().toString(),
title = title,
)
)
favored = newFavoredWenku,
)
return id
}

suspend fun updateFavored(
Expand Down
6 changes: 0 additions & 6 deletions server/src/main/kotlin/api/RouteWebNovel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import infra.common.*
import infra.oplog.Operation
import infra.oplog.OperationHistoryRepository
import infra.user.User
import infra.user.UserFavored
import infra.user.UserFavoredRepository
import infra.web.*
import infra.web.datasource.providers.NovelIdShouldBeReplacedException
Expand Down Expand Up @@ -377,7 +376,6 @@ class WebNovelApi(
val visited: Long,
val syncAt: Long,
val favored: String?,
val favoredList: List<UserFavored>,
val lastReadChapterId: String?,
val jp: Long,
val baidu: Long,
Expand Down Expand Up @@ -407,7 +405,6 @@ class WebNovelApi(
visited = novel.visited,
syncAt = novel.syncAt.epochSeconds,
favored = null,
favoredList = emptyList(),
lastReadChapterId = null,
jp = novel.jp,
baidu = novel.baidu,
Expand All @@ -419,14 +416,11 @@ class WebNovelApi(
dto
} else {
val novelId = novel.id.toHexString()
val favoredList = userFavoredRepo.getFavoredList(user.id)!!.favoredWeb
val favored = favoredRepo
.getFavoredId(user.id, novelId)
.takeIf { favored -> favoredList.any { it.id == favored } }
val history = historyRepo.getReaderHistory(user.id, novelId)
dto.copy(
favored = favored,
favoredList = favoredList,
lastReadChapterId = history?.chapterId,
)
}
Expand Down
6 changes: 0 additions & 6 deletions server/src/main/kotlin/api/RouteWenkuNovel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import infra.common.TranslatorId
import infra.oplog.Operation
import infra.oplog.OperationHistoryRepository
import infra.user.User
import infra.user.UserFavored
import infra.user.UserFavoredRepository
import infra.user.UserRole
import infra.wenku.WenkuNovelFilter
Expand Down Expand Up @@ -291,7 +290,6 @@ class WenkuNovelApi(
val volumes: List<WenkuNovelVolume>,
val visited: Long,
val favored: String?,
val favoredList: List<UserFavored>,
val volumeZh: List<String>,
val volumeJp: List<WenkuNovelVolumeJp>,
)
Expand Down Expand Up @@ -337,21 +335,17 @@ class WenkuNovelApi(
glossary = metadata.glossary,
visited = metadata.visited,
favored = null,
favoredList = emptyList(),
volumeZh = volumes.zh,
volumeJp = volumes.jp,
)

return if (user == null) {
dto
} else {
val favoredList = userFavoredRepo.getFavoredList(user.id)!!.favoredWenku
val favored = favoredRepo
.getFavoredId(user.id, novelId)
.takeIf { favored -> favoredList.any { it.id == favored } }
dto.copy(
favored = favored,
favoredList = favoredList,
)
}
}
Expand Down
53 changes: 1 addition & 52 deletions web/src/data/api/UserRepository.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Page } from '@/model/Page';
import { FavoredList, UserOutline, UserRole } from '@/model/User';
import { UserOutline, UserRole } from '@/model/User';
import { WebNovelOutlineDto } from '@/model/WebNovel';
import { WenkuNovelOutlineDto } from '@/model/WenkuNovel';

Expand All @@ -23,17 +23,6 @@ const updateReadHistoryWeb = (
const deleteReadHistoryWeb = (providerId: string, novelId: string) =>
client.delete(`user/read-history/${providerId}/${novelId}`);

const listFavored = () => client.get('user/favored').json<FavoredList>();

const createFavoredWeb = (json: { title: string }) =>
client.post(`user/favored-web`, { json });

const updateFavoredWeb = (favoredId: string, json: { title: string }) =>
client.put(`user/favored-web/${favoredId}`, { json });

const deleteFavoredWeb = (favoredId: string) =>
client.delete(`user/favored-web/${favoredId}`);

const listFavoredWebNovel = (
favoredId: string,
searchParams: {
Expand All @@ -46,27 +35,6 @@ const listFavoredWebNovel = (
.get(`user/favored-web/${favoredId}`, { searchParams })
.json<Page<WebNovelOutlineDto>>();

const favoriteWebNovel = (
favoredId: string,
providerId: string,
novelId: string,
) => client.put(`user/favored-web/${favoredId}/${providerId}/${novelId}`);

const unfavoriteWebNovel = (
favoredId: string,
providerId: string,
novelId: string,
) => client.delete(`user/favored-web/${favoredId}/${providerId}/${novelId}`);

const createFavoredWenku = (json: { title: string }) =>
client.post(`user/favored-wenku`, { json });

const updateFavoredWenku = (favoredId: string, json: { title: string }) =>
client.put(`user/favored-wenku/${favoredId}`, { json });

const deleteFavoredWenku = (favoredId: string) =>
client.delete(`user/favored-wenku/${favoredId}`);

const listFavoredWenkuNovel = (
favoredId: string,
searchParams: {
Expand All @@ -79,32 +47,13 @@ const listFavoredWenkuNovel = (
.get(`user/favored-wenku/${favoredId}`, { searchParams })
.json<Page<WenkuNovelOutlineDto>>();

const favoriteWenkuNovel = (favoredId: string, novelId: string) =>
client.put(`user/favored-wenku/${favoredId}/${novelId}`);

const unfavoriteWenkuNovel = (favoredId: string, novelId: string) =>
client.delete(`user/favored-wenku/${favoredId}/${novelId}`);

export const UserRepository = {
listUser,
//
listReadHistoryWeb,
updateReadHistoryWeb,
deleteReadHistoryWeb,
//
listFavored,
//
createFavoredWeb,
updateFavoredWeb,
deleteFavoredWeb,
listFavoredWebNovel,
favoriteWebNovel,
unfavoriteWebNovel,
//
createFavoredWenku,
updateFavoredWenku,
deleteFavoredWenku,
listFavoredWenkuNovel,
favoriteWenkuNovel,
unfavoriteWenkuNovel,
};
10 changes: 10 additions & 0 deletions web/src/data/favored/Favored.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export interface Favored {
id: string;
title: string;
}

export interface FavoredList {
web: Favored[];
wenku: Favored[];
local: Favored[];
}
65 changes: 65 additions & 0 deletions web/src/data/favored/FavoredApi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { client } from '@/data/api/client';

import { Favored } from './Favored';

interface FavoredList {
favoredWeb: Favored[];
favoredWenku: Favored[];
}
const listFavored = () => client.get('user/favored').json<FavoredList>();

//

const createFavoredWeb = (json: { title: string }) =>
client.post(`user/favored-web`, { json }).text();

const updateFavoredWeb = (favoredId: string, json: { title: string }) =>
client.put(`user/favored-web/${favoredId}`, { json });

const deleteFavoredWeb = (favoredId: string) =>
client.delete(`user/favored-web/${favoredId}`);

const favoriteWebNovel = (
favoredId: string,
providerId: string,
novelId: string,
) => client.put(`user/favored-web/${favoredId}/${providerId}/${novelId}`);

const unfavoriteWebNovel = (
favoredId: string,
providerId: string,
novelId: string,
) => client.delete(`user/favored-web/${favoredId}/${providerId}/${novelId}`);

//

const createFavoredWenku = (json: { title: string }) =>
client.post(`user/favored-wenku`, { json }).text();

const updateFavoredWenku = (favoredId: string, json: { title: string }) =>
client.put(`user/favored-wenku/${favoredId}`, { json });

const deleteFavoredWenku = (favoredId: string) =>
client.delete(`user/favored-wenku/${favoredId}`);

const favoriteWenkuNovel = (favoredId: string, novelId: string) =>
client.put(`user/favored-wenku/${favoredId}/${novelId}`);

const unfavoriteWenkuNovel = (favoredId: string, novelId: string) =>
client.delete(`user/favored-wenku/${favoredId}/${novelId}`);

export const FavoredApi = {
listFavored,
//
createFavoredWeb,
updateFavoredWeb,
deleteFavoredWeb,
favoriteWebNovel,
unfavoriteWebNovel,
//
createFavoredWenku,
updateFavoredWenku,
deleteFavoredWenku,
favoriteWenkuNovel,
unfavoriteWenkuNovel,
};
Loading

0 comments on commit 0a551ed

Please sign in to comment.