list uploaded code bundles on bot page
This commit is contained in:
parent
0f27ca80fb
commit
3e902bb56e
4 changed files with 43 additions and 15 deletions
|
@ -57,3 +57,9 @@ pub fn create_code_bundle(
|
||||||
.values(new_code_bundle)
|
.values(new_code_bundle)
|
||||||
.get_result(conn)
|
.get_result(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn find_bot_code_bundles(bot_id: i32, conn: &PgConnection) -> QueryResult<Vec<CodeBundle>> {
|
||||||
|
code_bundles::table
|
||||||
|
.filter(code_bundles::bot_id.eq(bot_id))
|
||||||
|
.get_results(conn)
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ use axum::Json;
|
||||||
use rand::distributions::Alphanumeric;
|
use rand::distributions::Alphanumeric;
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serde_json::{json, value::Value as JsonValue};
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
use std::path::{self, PathBuf};
|
use std::path::{self, PathBuf};
|
||||||
|
|
||||||
|
@ -35,10 +36,17 @@ pub async fn create_bot(
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: handle errors
|
// TODO: handle errors
|
||||||
pub async fn get_bot(conn: DatabaseConnection, Path(bot_id): Path<i32>) -> impl IntoResponse {
|
pub async fn get_bot(
|
||||||
bots::find_bot(bot_id, &conn)
|
conn: DatabaseConnection,
|
||||||
.map(Json)
|
Path(bot_id): Path<i32>,
|
||||||
.map_err(|_| StatusCode::NOT_FOUND)
|
) -> Result<Json<JsonValue>, StatusCode> {
|
||||||
|
let bot = bots::find_bot(bot_id, &conn).map_err(|_| StatusCode::NOT_FOUND)?;
|
||||||
|
let bundles = bots::find_bot_code_bundles(bot.id, &conn)
|
||||||
|
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
|
||||||
|
Ok(Json(json!({
|
||||||
|
"bot": bot,
|
||||||
|
"bundles": bundles,
|
||||||
|
})))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_my_bots(
|
pub async fn get_my_bots(
|
||||||
|
|
|
@ -12,13 +12,12 @@
|
||||||
"format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ."
|
"format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ."
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@originjs/vite-plugin-commonjs": "^1.0.1",
|
||||||
"@sveltejs/adapter-auto": "next",
|
"@sveltejs/adapter-auto": "next",
|
||||||
"@sveltejs/kit": "next",
|
"@sveltejs/kit": "next",
|
||||||
|
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.30",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.31.1",
|
"@typescript-eslint/eslint-plugin": "^4.31.1",
|
||||||
"@typescript-eslint/parser": "^4.31.1",
|
"@typescript-eslint/parser": "^4.31.1",
|
||||||
"@originjs/vite-plugin-commonjs": "^1.0.1",
|
|
||||||
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.30",
|
|
||||||
"vite-plugin-wasm-pack": "^0.1.9",
|
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-config-prettier": "^8.3.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
"eslint-plugin-svelte3": "^3.2.1",
|
"eslint-plugin-svelte3": "^3.2.1",
|
||||||
|
@ -28,10 +27,12 @@
|
||||||
"svelte-check": "^2.2.6",
|
"svelte-check": "^2.2.6",
|
||||||
"svelte-preprocess": "^4.9.4",
|
"svelte-preprocess": "^4.9.4",
|
||||||
"tslib": "^2.3.1",
|
"tslib": "^2.3.1",
|
||||||
"typescript": "^4.4.3"
|
"typescript": "^4.4.3",
|
||||||
|
"vite-plugin-wasm-pack": "^0.1.9"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"dayjs": "^1.10.7",
|
||||||
"moment": "^2.29.1"
|
"moment": "^2.29.1"
|
||||||
},
|
},
|
||||||
"type": "module"
|
"type": "module"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
<script lang="ts" context="module">
|
<script lang="ts" context="module">
|
||||||
import { get_session_token } from "$lib/auth";
|
import { get_session_token } from "$lib/auth";
|
||||||
|
import { mount_component } from "svelte/internal";
|
||||||
|
|
||||||
export async function load({ page }) {
|
export async function load({ page }) {
|
||||||
const token = get_session_token();
|
const token = get_session_token();
|
||||||
const res = await fetch(`/api/bots/${page.params["bot_id"]}`, {
|
const res = await fetch(`/api/bots/${page.params["bot_id"]}`, {
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Authorization": `Bearer ${token}`,
|
Authorization: `Bearer ${token}`,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
|
const data = await res.json();
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
bot: await res.json(),
|
bot: data["bot"],
|
||||||
|
bundles: data["bundles"],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -26,7 +29,10 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
export let bot: object;
|
export let bot: object;
|
||||||
|
export let bundles: object[];
|
||||||
|
|
||||||
let files;
|
let files;
|
||||||
|
|
||||||
|
@ -41,7 +47,7 @@
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
// the content type header will be set by the browser
|
// the content type header will be set by the browser
|
||||||
"Authorization": `Bearer ${token}`,
|
Authorization: `Bearer ${token}`,
|
||||||
},
|
},
|
||||||
body: formData,
|
body: formData,
|
||||||
});
|
});
|
||||||
|
@ -54,9 +60,16 @@
|
||||||
{bot["name"]}
|
{bot["name"]}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div>Upload code</div>
|
<div>Upload code</div>
|
||||||
<form on:submit|preventDefault={submitCode}>
|
<form on:submit|preventDefault={submitCode}>
|
||||||
<input type="file" bind:files/>
|
<input type="file" bind:files />
|
||||||
<button type="submit">Submit</button>
|
<button type="submit">Submit</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{#each bundles as bundle}
|
||||||
|
<li>
|
||||||
|
bundle created at {dayjs(bundle["created_at"]).format("YYYY-MM-DD HH:mm")}
|
||||||
|
</li>
|
||||||
|
{/each}
|
||||||
|
</ul>
|
||||||
|
|
Loading…
Reference in a new issue