Skip to content

Commit 07ac5d1

Browse files
committed
fix(devbox):fix multi-region
1 parent 226ddef commit 07ac5d1

File tree

15 files changed

+132
-78
lines changed

15 files changed

+132
-78
lines changed

Diff for: frontend/providers/devbox/app/[lang]/(platform)/devbox/create/components/form/BasicConfiguration/TemplateRepositorySelector/index.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { getTemplateRepository, listOfficialTemplateRepository } from '@/api/template'
2+
import useDriver from '@/hooks/useDriver'
23
import { TemplateRepositoryKind } from '@/prisma/generated/client'
34
import { useDevboxStore } from '@/stores/devbox'
45
import { DevboxEditTypeV2 } from '@/types/devbox'
@@ -11,7 +12,6 @@ import { useFormContext } from 'react-hook-form'
1112
import Label from '../../Label'
1213
import TemplateRepositoryListNav from '../TemplateRepositoryListNav'
1314
import TemplateRepositoryItem from './TemplateReposistoryItem'
14-
import useDriver from '@/hooks/useDriver'
1515

1616
interface TemplateRepositorySelectorProps {
1717
isEdit: boolean
@@ -139,8 +139,8 @@ export default function TemplateRepositorySelector({ isEdit }: TemplateRepositor
139139
])
140140
return (
141141
<VStack alignItems={'center'} mb={7} gap={'24px'}>
142-
<Box className="guide-runtimes">
143-
<Flex w="full" justify={'space-between'} mb={'24px'}>
142+
<Flex className="guide-runtimes" gap={'24px'} flexDir={'column'} w={'full'}>
143+
<Flex w="full" justify={'space-between'} >
144144
<Label w={100} alignSelf={'flex-start'}>
145145
{t('runtime_environment')}
146146
</Label>
@@ -171,7 +171,7 @@ export default function TemplateRepositorySelector({ isEdit }: TemplateRepositor
171171
))}
172172
</Flex>
173173
</Flex>
174-
</Box>
174+
</Flex>
175175
<Flex gap={'10px'} px={'14px'} width={'full'}>
176176
{/* Framework */}
177177
{categorizedData['FRAMEWORK'].length !== 0 && <Box width={'85px'}>{t('framework')}</Box>}

Diff for: frontend/providers/devbox/app/[lang]/(platform)/template/updateTemplate/EditTemplateModal.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,14 @@ const EditTemplateModal: FC<CreateTemplateModalProps> = ({
9393
dataIndex: 'createAt',
9494
key: 'createAt',
9595
render: (item) => {
96-
return <Text color={'grayModern.600'}>{dayjs().format('YYYY-MM-DD mm:ss')}</Text>
96+
return <Text color={'grayModern.600'}>{dayjs().format('YYYY-MM-DD hh:mm')}</Text>
9797
}
9898
}, {
9999
title: t('update_time'),
100100
dataIndex: 'createAt',
101101
key: 'createAt',
102102
render: (item) => {
103-
return <Text color={'grayModern.600'}>{dayjs().format('YYYY-MM-DD mm:ss')}</Text>
103+
return <Text color={'grayModern.600'}>{dayjs().format('YYYY-MM-DD hh:mm')}</Text>
104104
}
105105
},
106106
{

Diff for: frontend/providers/devbox/app/api/auth/init/route.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { authSessionWithDesktopJWT, generateDevboxToken } from "@/services/backend/auth"
22
import { jsonRes } from "@/services/backend/response"
33
import { devboxDB } from "@/services/db/init"
4+
import { getRegionUid } from "@/utils/env"
45
import { makeOrganizationName } from "@/utils/user"
56

67
import { NextRequest } from "next/server"
@@ -109,9 +110,9 @@ const findOrCreateUser = async (regionUid: string, namespaceId: string) => {
109110
})
110111
}
111112
export async function POST(req: NextRequest) {
112-
const regionUid = process.env.REGION_UID
113+
const regionUid = getRegionUid()
113114
if (!regionUid) {
114-
console.log("REGIONUID is not set")
115+
console.log("REGION_UID is not set")
115116
return jsonRes({
116117
code: 500,
117118
})

Diff for: frontend/providers/devbox/app/api/templateRepository/delete/route.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { authSessionWithJWT } from '@/services/backend/auth'
22
import { jsonRes } from '@/services/backend/response'
33
import { devboxDB } from '@/services/db/init'
4+
import { getRegionUid } from '@/utils/env'
45
import { NextRequest } from 'next/server'
56
import { z } from 'zod'
67

@@ -23,11 +24,13 @@ export async function DELETE(req: NextRequest) {
2324
const {payload} = await authSessionWithJWT(headerList)
2425

2526
const deletedAt = new Date()
27+
const regionUid = getRegionUid()
2628
await devboxDB.templateRepository.update({
2729
where: {
2830
uid,
2931
organizationUid: payload.organizationUid,
3032
isDeleted: false,
33+
regionUid
3134
},
3235
data: {
3336
deletedAt,

Diff for: frontend/providers/devbox/app/api/templateRepository/get/route.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { authSessionWithJWT } from '@/services/backend/auth'
22
import { jsonRes } from '@/services/backend/response'
33
import { devboxDB } from '@/services/db/init'
4+
import { getRegionUid } from '@/utils/env'
45
import { NextRequest } from 'next/server'
56
import { z } from 'zod'
67

@@ -19,10 +20,12 @@ export async function GET(req: NextRequest) {
1920
})
2021
}
2122
const uid = uidResult.data
23+
const regionUid = getRegionUid()
2224
const templateRepository = await devboxDB.templateRepository.findUnique({
2325
where: {
2426
uid,
25-
isDeleted: false
27+
isDeleted: false,
28+
regionUid
2629
},
2730
select: {
2831
templates: {

Diff for: frontend/providers/devbox/app/api/templateRepository/list/route.ts

+26-34
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Prisma } from '@/prisma/generated/client'
22
import { jsonRes } from '@/services/backend/response'
33
import { devboxDB } from '@/services/db/init'
4+
import { getRegionUid } from '@/utils/env'
45
import { NextRequest } from 'next/server'
56
import { z } from 'zod'
67
export const dynamic = 'force-dynamic'
@@ -11,45 +12,36 @@ export async function GET(req: NextRequest) {
1112
const search = searchParams.get('search') || ''
1213
const page = z.number().int().positive().safeParse(Number(searchParams.get('page'))).data || 1
1314
const pageSize = z.number().int().min(1).safeParse(Number(searchParams.get('pageSize'))).data || 30
14-
const dbquery: Prisma.TemplateRepositoryWhereInput = {
15-
16-
...(tags && tags.length > 0
17-
? {
18-
AND: tags.map((tag) => ({
19-
templateRepositoryTags: {
20-
some: {
21-
tagUid: tag
22-
}
23-
}
24-
}))
25-
}
26-
: {}),
27-
...(search && search.length > 0
28-
? {
29-
name: {
30-
contains: search
31-
}
32-
}
33-
: {})
34-
}
3515
const [templateRepositoryList, totalItems] = await devboxDB.$transaction(async tx => {
36-
const validRepoIds = await tx.template.findMany({
37-
where: {
38-
isDeleted: false,
39-
},
40-
select: {
41-
templateRepositoryUid: true
42-
},
43-
distinct: ['templateRepositoryUid']
44-
})
4516

17+
const regionUid = getRegionUid()
4618
const where: Prisma.TemplateRepositoryWhereInput = {
47-
uid: {
48-
in: validRepoIds.map(r => r.templateRepositoryUid)
19+
templates: {
20+
some: {
21+
isDeleted: false
22+
}
4923
},
5024
isPublic: true,
5125
isDeleted: false,
52-
...dbquery
26+
regionUid,
27+
...(tags && tags.length > 0
28+
? {
29+
AND: tags.map((tag) => ({
30+
templateRepositoryTags: {
31+
some: {
32+
tagUid: tag
33+
}
34+
}
35+
}))
36+
}
37+
: {}),
38+
...(search && search.length > 0
39+
? {
40+
name: {
41+
contains: search
42+
}
43+
}
44+
: {})
5345
}
5446
const [templateRepositoryList, totalItems] = await Promise.all([
5547
tx.templateRepository.findMany({
@@ -88,7 +80,7 @@ export async function GET(req: NextRequest) {
8880
]
8981
}),
9082
tx.templateRepository.count({
91-
where: dbquery,
83+
where,
9284
})
9385
])
9486
return [templateRepositoryList, totalItems]

Diff for: frontend/providers/devbox/app/api/templateRepository/listOfficial/route.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { jsonRes } from '@/services/backend/response'
22
import { devboxDB } from '@/services/db/init'
3+
import { getRegionUid } from '@/utils/env'
34
import { NextRequest } from 'next/server'
45
export const dynamic = 'force-dynamic'
56

@@ -10,12 +11,14 @@ export const GET = async function GET(req: NextRequest) {
1011
id: 'labring'
1112
}
1213
})
13-
if(!organization) throw Error('organization not found')
14+
if (!organization) throw Error('organization not found')
15+
const regionUid = getRegionUid()
1416
const templateRepositoryList = await devboxDB.templateRepository.findMany({
1517
where: {
1618
isPublic: true,
1719
isDeleted: false,
18-
organizationUid: organization.uid
20+
organizationUid: organization.uid,
21+
regionUid,
1922
},
2023
select: {
2124
kind: true,

Diff for: frontend/providers/devbox/app/api/templateRepository/template/getConfig/route.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { authSessionWithJWT } from '@/services/backend/auth'
22
import { jsonRes } from '@/services/backend/response'
33
import { devboxDB } from '@/services/db/init'
4+
import { getRegionUid } from '@/utils/env'
45
import { NextRequest } from 'next/server'
56

67
export const dynamic = 'force-dynamic'
@@ -32,16 +33,19 @@ export async function GET(req: NextRequest) {
3233
isDeleted: true
3334
}
3435
},
36+
regionUid: true,
3537
isDeleted: true,
3638
isPublic: true,
3739
}
3840
}
3941
}
4042
})
43+
const regionUid = getRegionUid()
4144
if (!template ||
4245
!(template.templateRepository.organization.uid === payload.organizationUid
4346
|| template.templateRepository.isPublic === true
44-
)
47+
) ||
48+
template.templateRepository.regionUid !== regionUid
4549
) {
4650
return jsonRes({
4751
code: 404,

Diff for: frontend/providers/devbox/app/api/templateRepository/template/list/route.ts

+21-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { authSessionWithJWT } from '@/services/backend/auth'
22
import { jsonRes } from '@/services/backend/response'
33
import { devboxDB } from '@/services/db/init'
4+
import { getRegionUid } from '@/utils/env'
45
import { NextRequest } from 'next/server'
56

67
export const dynamic = 'force-dynamic'
@@ -18,12 +19,13 @@ export async function GET(req: NextRequest) {
1819
const templateRepository = await devboxDB.templateRepository.findUnique({
1920
where: {
2021
uid,
21-
isDeleted: false
22+
isDeleted: false,
23+
regionUid: getRegionUid()
2224
},
2325
select: {
2426
name: true,
2527
uid: true,
26-
organization:{
28+
organization: {
2729
select: {
2830
uid: true,
2931
isDeleted: true
@@ -45,18 +47,26 @@ export async function GET(req: NextRequest) {
4547
}
4648
}
4749
})
48-
if (templateRepository &&
49-
!(
50-
(templateRepository.organization.isDeleted === false
51-
&& templateRepository.organization.uid === payload.organizationUid)
52-
|| templateRepository.isPublic === true
53-
)) {
50+
51+
if (!templateRepository) {
52+
return jsonRes({
53+
data: {
54+
templateList: []
55+
}
56+
})
57+
}
58+
const templateList = templateRepository.templates
59+
if (!(
60+
(templateRepository.organization.isDeleted === false
61+
&& templateRepository.organization.uid === payload.organizationUid)
62+
|| templateRepository.isPublic === true
63+
)) {
5464
return jsonRes({
55-
code: 404,
56-
error: 'Template is not found'
65+
data: {
66+
templateList
67+
}
5768
})
5869
}
59-
const templateList = templateRepository?.templates || []
6070
return jsonRes({
6171
data: {
6272
templateList

Diff for: frontend/providers/devbox/app/api/templateRepository/update/route.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { TagType } from "@/prisma/generated/client"
22
import { authSessionWithJWT } from "@/services/backend/auth"
33
import { jsonRes } from "@/services/backend/response"
44
import { devboxDB } from "@/services/db/init"
5+
import { getRegionUid } from "@/utils/env"
56
import { updateTemplateRepositorySchema } from "@/utils/vaildate"
67
import { NextRequest } from "next/server"
78
import { z } from "zod"
@@ -66,7 +67,8 @@ export async function POST(req: NextRequest) {
6667
)
6768
const isExist = await devboxDB.templateRepository.findUnique({
6869
where: {
69-
isDeleted_name: {
70+
isDeleted_regionUid_name: {
71+
regionUid: getRegionUid(),
7072
name: query.templateRepositoryName,
7173
isDeleted: false,
7274
}

Diff for: frontend/providers/devbox/app/api/templateRepository/withTemplate/create/route.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { devboxDB } from "@/services/db/init"
66
import { ERROR_ENUM } from "@/services/error"
77
import { retagSvcClient } from "@/services/retag"
88
import { KBDevboxReleaseType, KBDevboxTypeV2 } from "@/types/k8s"
9+
import { getRegionUid } from "@/utils/env"
910
import { createTemplateRepositorySchema } from "@/utils/vaildate"
1011
import { NextRequest } from "next/server"
1112
import { z } from "zod"
@@ -58,7 +59,8 @@ export async function POST(req: NextRequest) {
5859
}
5960
const isExist = await devboxDB.templateRepository.findUnique({
6061
where: {
61-
isDeleted_name: {
62+
isDeleted_regionUid_name: {
63+
regionUid: getRegionUid(),
6264
name: query.templateRepositoryName,
6365
isDeleted: false
6466
},
@@ -139,6 +141,7 @@ export async function POST(req: NextRequest) {
139141
parentUid: devboxBody.spec.templateID,
140142
}
141143
},
144+
regionUid: getRegionUid(),
142145
organizationUid: payload.organizationUid,
143146
iconId: origionalTemplate?.templateRepository.iconId,
144147
kind: TemplateRepositoryKind.CUSTOM,

Diff for: frontend/providers/devbox/app/api/templateRepository/withTemplate/update/route.ts

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { devboxDB } from '@/services/db/init'
66
import { ERROR_ENUM } from '@/services/error'
77
import { retagSvcClient } from '@/services/retag'
88
import { KBDevboxReleaseType, KBDevboxTypeV2 } from '@/types/k8s'
9+
import { getRegionUid } from '@/utils/env'
910
import { updateTemplateSchema } from '@/utils/vaildate'
1011
import { NextRequest } from 'next/server'
1112
import { z } from 'zod'
@@ -75,6 +76,7 @@ export async function POST(req: NextRequest) {
7576
where: {
7677
uid: query.templateRepositoryUid,
7778
organizationUid: payload.organizationUid,
79+
regionUid: getRegionUid()
7880
},
7981
select: {
8082
uid: true,
@@ -83,6 +85,7 @@ export async function POST(req: NextRequest) {
8385
select: {
8486
tagUid: true
8587
}
88+
8689
},
8790
templates: true
8891
}
@@ -130,6 +133,7 @@ export async function POST(req: NextRequest) {
130133
await tx.templateRepository.update({
131134
where: {
132135
organizationUid: organization.uid,
136+
regionUid: getRegionUid(),
133137
uid: templateRepository.uid,
134138
},
135139
data: {

0 commit comments

Comments
 (0)