From 0f4630a5345be89eb832d30c93c1c36b3ffd378a Mon Sep 17 00:00:00 2001 From: TZGyn Date: Sat, 23 Nov 2024 20:28:02 +0800 Subject: [PATCH] add bingx api --- bun.lockb | Bin 106489 -> 109702 bytes components.json | 2 +- package.json | 3 +- .../components/ui/card/card-content.svelte | 16 + .../ui/card/card-description.svelte | 16 + src/lib/components/ui/card/card-footer.svelte | 16 + src/lib/components/ui/card/card-header.svelte | 16 + src/lib/components/ui/card/card-title.svelte | 25 ++ src/lib/components/ui/card/card.svelte | 20 + src/lib/components/ui/card/index.ts | 22 + src/lib/components/ui/scroll-area/index.ts | 10 + .../scroll-area/scroll-area-scrollbar.svelte | 29 ++ .../ui/scroll-area/scroll-area.svelte | 32 ++ src/lib/components/ui/tabs/index.ts | 18 + .../components/ui/tabs/tabs-content.svelte | 19 + src/lib/components/ui/tabs/tabs-list.svelte | 19 + .../components/ui/tabs/tabs-trigger.svelte | 19 + src/routes/(components)/bingx.svelte | 289 +++++++++++++ src/routes/(components)/schema.ts | 46 +++ src/routes/+page.svelte | 389 ++++++++++-------- src/routes/api/bingx/+server.ts | 10 + 21 files changed, 834 insertions(+), 182 deletions(-) create mode 100644 src/lib/components/ui/card/card-content.svelte create mode 100644 src/lib/components/ui/card/card-description.svelte create mode 100644 src/lib/components/ui/card/card-footer.svelte create mode 100644 src/lib/components/ui/card/card-header.svelte create mode 100644 src/lib/components/ui/card/card-title.svelte create mode 100644 src/lib/components/ui/card/card.svelte create mode 100644 src/lib/components/ui/card/index.ts create mode 100644 src/lib/components/ui/scroll-area/index.ts create mode 100644 src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte create mode 100644 src/lib/components/ui/scroll-area/scroll-area.svelte create mode 100644 src/lib/components/ui/tabs/index.ts create mode 100644 src/lib/components/ui/tabs/tabs-content.svelte create mode 100644 src/lib/components/ui/tabs/tabs-list.svelte create mode 100644 src/lib/components/ui/tabs/tabs-trigger.svelte create mode 100644 src/routes/(components)/bingx.svelte create mode 100644 src/routes/(components)/schema.ts create mode 100644 src/routes/api/bingx/+server.ts diff --git a/bun.lockb b/bun.lockb index 9b9612a02f0a60531ee81c926c5e5a666d79306f..b04ce0fecfde558b39f807cfaa6472138df687ad 100755 GIT binary patch delta 19321 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 S26tlkNkYgT=S8g2{C@$PG3%TF delta 17367 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 B?LPnj diff --git a/components.json b/components.json index 5fd5e49..dc58f0a 100644 --- a/components.json +++ b/components.json @@ -14,4 +14,4 @@ }, "typescript": true, "registry": "https://next.shadcn-svelte.com/registry" -} \ No newline at end of file +} diff --git a/package.json b/package.json index 99618ce..a0d7b5a 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^4.0.0", "autoprefixer": "^10.4.20", - "bits-ui": "^1.0.0-next.34", + "bits-ui": "^1.0.0-next.64", "clsx": "^2.1.1", "formsnap": "^2.0.0-next.1", "lucide-svelte": "^0.454.0", @@ -36,6 +36,7 @@ "zod": "^3.23.8" }, "dependencies": { + "axios": "^1.7.7", "mode-watcher": "^0.4.1" } } diff --git a/src/lib/components/ui/card/card-content.svelte b/src/lib/components/ui/card/card-content.svelte new file mode 100644 index 0000000..1f52856 --- /dev/null +++ b/src/lib/components/ui/card/card-content.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/src/lib/components/ui/card/card-description.svelte b/src/lib/components/ui/card/card-description.svelte new file mode 100644 index 0000000..da02664 --- /dev/null +++ b/src/lib/components/ui/card/card-description.svelte @@ -0,0 +1,16 @@ + + +

+ {@render children?.()} +

diff --git a/src/lib/components/ui/card/card-footer.svelte b/src/lib/components/ui/card/card-footer.svelte new file mode 100644 index 0000000..6894149 --- /dev/null +++ b/src/lib/components/ui/card/card-footer.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/src/lib/components/ui/card/card-header.svelte b/src/lib/components/ui/card/card-header.svelte new file mode 100644 index 0000000..1baa92c --- /dev/null +++ b/src/lib/components/ui/card/card-header.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/src/lib/components/ui/card/card-title.svelte b/src/lib/components/ui/card/card-title.svelte new file mode 100644 index 0000000..f7d59c1 --- /dev/null +++ b/src/lib/components/ui/card/card-title.svelte @@ -0,0 +1,25 @@ + + +
+ {@render children?.()} +
diff --git a/src/lib/components/ui/card/card.svelte b/src/lib/components/ui/card/card.svelte new file mode 100644 index 0000000..3e3a4ed --- /dev/null +++ b/src/lib/components/ui/card/card.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/src/lib/components/ui/card/index.ts b/src/lib/components/ui/card/index.ts new file mode 100644 index 0000000..0f9084d --- /dev/null +++ b/src/lib/components/ui/card/index.ts @@ -0,0 +1,22 @@ +import Root from "./card.svelte"; +import Content from "./card-content.svelte"; +import Description from "./card-description.svelte"; +import Footer from "./card-footer.svelte"; +import Header from "./card-header.svelte"; +import Title from "./card-title.svelte"; + +export { + Root, + Content, + Description, + Footer, + Header, + Title, + // + Root as Card, + Content as CardContent, + Description as CardDescription, + Footer as CardFooter, + Header as CardHeader, + Title as CardTitle, +}; diff --git a/src/lib/components/ui/scroll-area/index.ts b/src/lib/components/ui/scroll-area/index.ts new file mode 100644 index 0000000..e86a25b --- /dev/null +++ b/src/lib/components/ui/scroll-area/index.ts @@ -0,0 +1,10 @@ +import Scrollbar from "./scroll-area-scrollbar.svelte"; +import Root from "./scroll-area.svelte"; + +export { + Root, + Scrollbar, + //, + Root as ScrollArea, + Scrollbar as ScrollAreaScrollbar, +}; diff --git a/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte b/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte new file mode 100644 index 0000000..b436056 --- /dev/null +++ b/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte @@ -0,0 +1,29 @@ + + + + {@render children?.()} + + diff --git a/src/lib/components/ui/scroll-area/scroll-area.svelte b/src/lib/components/ui/scroll-area/scroll-area.svelte new file mode 100644 index 0000000..9943f83 --- /dev/null +++ b/src/lib/components/ui/scroll-area/scroll-area.svelte @@ -0,0 +1,32 @@ + + + + + {@render children?.()} + + {#if orientation === "vertical" || orientation === "both"} + + {/if} + {#if orientation === "horizontal" || orientation === "both"} + + {/if} + + diff --git a/src/lib/components/ui/tabs/index.ts b/src/lib/components/ui/tabs/index.ts new file mode 100644 index 0000000..f1ab372 --- /dev/null +++ b/src/lib/components/ui/tabs/index.ts @@ -0,0 +1,18 @@ +import { Tabs as TabsPrimitive } from "bits-ui"; +import Content from "./tabs-content.svelte"; +import List from "./tabs-list.svelte"; +import Trigger from "./tabs-trigger.svelte"; + +const Root = TabsPrimitive.Root; + +export { + Root, + Content, + List, + Trigger, + // + Root as Tabs, + Content as TabsContent, + List as TabsList, + Trigger as TabsTrigger, +}; diff --git a/src/lib/components/ui/tabs/tabs-content.svelte b/src/lib/components/ui/tabs/tabs-content.svelte new file mode 100644 index 0000000..f1c0515 --- /dev/null +++ b/src/lib/components/ui/tabs/tabs-content.svelte @@ -0,0 +1,19 @@ + + + diff --git a/src/lib/components/ui/tabs/tabs-list.svelte b/src/lib/components/ui/tabs/tabs-list.svelte new file mode 100644 index 0000000..f03e5fc --- /dev/null +++ b/src/lib/components/ui/tabs/tabs-list.svelte @@ -0,0 +1,19 @@ + + + diff --git a/src/lib/components/ui/tabs/tabs-trigger.svelte b/src/lib/components/ui/tabs/tabs-trigger.svelte new file mode 100644 index 0000000..f1f5825 --- /dev/null +++ b/src/lib/components/ui/tabs/tabs-trigger.svelte @@ -0,0 +1,19 @@ + + + diff --git a/src/routes/(components)/bingx.svelte b/src/routes/(components)/bingx.svelte new file mode 100644 index 0000000..89cdf4a --- /dev/null +++ b/src/routes/(components)/bingx.svelte @@ -0,0 +1,289 @@ + + +
+ + + {#snippet children({ props })} + Symbol + + {/snippet} + + Symbol + + + + + {#snippet children({ props })} + Limit + + {/snippet} + + Limit + + + + + {#snippet children({ props })} + Interval + + + {$formData.interval ?? 'Select a interval'} + + + {#each intervals as interval} + + {/each} + + + {/snippet} + + Interval + + + + + {#snippet children({ props })} + Start Date + + + {start + ? df.format(start.toDate(getLocalTimeZone())) + : 'Pick a date'} + + + + { + if (v) { + $formData.start = v.toString() + } else { + $formData.start = '' + } + }} /> + + + Start Date + + + {/snippet} + + + + + {#snippet children({ props })} + Start Time + + {/snippet} + + Start Time + + + + + {#snippet children({ props })} + End Date + + + {end + ? df.format(end.toDate(getLocalTimeZone())) + : 'Pick a date'} + + + + { + if (v) { + $formData.end = v.toString() + } else { + $formData.end = '' + } + }} /> + + + End Date + + + {/snippet} + + + + + {#snippet children({ props })} + End Time + + {/snippet} + + End Time + + + Submit +
diff --git a/src/routes/(components)/schema.ts b/src/routes/(components)/schema.ts new file mode 100644 index 0000000..b4155f4 --- /dev/null +++ b/src/routes/(components)/schema.ts @@ -0,0 +1,46 @@ +import { z } from 'zod' + +export type Interval = + | '1m' + | '3m' + | '5m' + | '15m' + | '30m' + | '1h' + | '2h' + | '4h' + | '6h' + | '8h' + | '12h' + | '1d' + | '3d' + | '1w' + | '1M' + +export const intervals: Interval[] = [ + '1m', + '3m', + '5m', + '15m', + '30m', + '1h', + '2h', + '4h', + '6h', + '8h', + '12h', + '1d', + '3d', + '1w', + '1M', +] + +export const bingxAPISchema = z.object({ + symbol: z.string(), + interval: z.custom(), + start: z.string().min(1), + startTime: z.string().min(1), + end: z.string().min(1), + endTime: z.string().min(1), + limit: z.number().int().min(1).max(1000).optional(), +}) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index ae0c079..26cae85 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -9,6 +9,8 @@ import { CalendarIcon } from 'lucide-svelte' import { Calendar } from '$lib/components/ui/calendar/index.js' import * as Popover from '$lib/components/ui/popover/index.js' + import * as Card from '$lib/components/ui/card/index.js' + import * as Tabs from '$lib/components/ui/tabs/index.js' import { CalendarDate, DateFormatter, @@ -19,6 +21,8 @@ } from '@internationalized/date' import { cn } from '$lib/utils.js' import { buttonVariants } from '$lib/components/ui/button' + import Bingx from './(components)/bingx.svelte' + import { ScrollArea } from '$lib/components/ui/scroll-area' let { data } = $props() @@ -100,183 +104,208 @@ let placeholder = $state(today(getLocalTimeZone())) -
- - - {#snippet children({ props })} - Symbol - - {/snippet} - - Symbol - - - - - {#snippet children({ props })} - Limit - - {/snippet} - - Limit - - - - - {#snippet children({ props })} - Category - - - {$formData.category ?? 'Select a category'} - - - {#each categories as category} - - {/each} - - - {/snippet} - - Category - - - - - {#snippet children({ props })} - Interval - - - {$formData.interval ?? 'Select a interval'} - - - {#each intervals as interval} - - {/each} - - - {/snippet} - - Category - - - - - {#snippet children({ props })} - Start Date - - - {start - ? df.format(start.toDate(getLocalTimeZone())) - : 'Pick a date'} - - - - { - if (v) { - $formData.start = v.toString() - } else { - $formData.start = '' - } - }} /> - - - - Your date of birth is used to calculator your age - - - - {/snippet} - - - - - {#snippet children({ props })} - Start Time - - {/snippet} - - Limit - - - - - {#snippet children({ props })} - End Date - - - {end - ? df.format(end.toDate(getLocalTimeZone())) - : 'Pick a date'} - - - - { - if (v) { - $formData.end = v.toString() - } else { - $formData.end = '' - } - }} /> - - - - Your date of birth is used to calculator your age - - - - {/snippet} - - - - - {#snippet children({ props })} - End Time - - {/snippet} - - Limit - - - Submit -
+
+ + + + + ByBit + BingX + + +
+ + + {#snippet children({ props })} + Symbol + + {/snippet} + + Symbol + + + + + {#snippet children({ props })} + Limit + + {/snippet} + + Limit + + + + + {#snippet children({ props })} + Category + + + {$formData.category ?? 'Select a category'} + + + {#each categories as category} + + {/each} + + + {/snippet} + + Category + + + + + {#snippet children({ props })} + Interval + + + {$formData.interval ?? 'Select a interval'} + + + {#each intervals as interval} + + {/each} + + + {/snippet} + + Interval + + + + + {#snippet children({ props })} + Start Date + + + {start + ? df.format(start.toDate(getLocalTimeZone())) + : 'Pick a date'} + + + + { + if (v) { + $formData.start = v.toString() + } else { + $formData.start = '' + } + }} /> + + + Start Time + + + {/snippet} + + + + + {#snippet children({ props })} + Start Time + + {/snippet} + + Start Time + + + + + {#snippet children({ props })} + End Date + + + {end + ? df.format(end.toDate(getLocalTimeZone())) + : 'Pick a date'} + + + + { + if (v) { + $formData.end = v.toString() + } else { + $formData.end = '' + } + }} /> + + + End Date + + + {/snippet} + + + + + {#snippet children({ props })} + End Time + + {/snippet} + + End Time + + + Submit +
+
+ + + +
+
+
+
diff --git a/src/routes/api/bingx/+server.ts b/src/routes/api/bingx/+server.ts new file mode 100644 index 0000000..533f62b --- /dev/null +++ b/src/routes/api/bingx/+server.ts @@ -0,0 +1,10 @@ +import { json } from '@sveltejs/kit' +import type { RequestHandler } from '../$types' + +export const POST: RequestHandler = async ({ request }) => { + const body = await request.json() + + const response = await fetch(body.url) + + return json(await response.json()) +}