Optimize tags

This commit is contained in:
Brieuc Dubois 2023-12-29 03:21:10 +01:00
parent c4b41d79a2
commit aaef1cb67d
4 changed files with 82 additions and 67 deletions

View File

@ -16,19 +16,26 @@ func CreateCard(c types.Card) (int, error) {
return int(id), nil return int(id), nil
} }
func GetAllCardsOf(projectID int) ([]types.Card, error) { func GetAllCardsOf(projectID int) ([]types.FullCard, error) {
rows, err := db.Query("SELECT * FROM cards WHERE project_id = ?", projectID) rows, err := db.Query("SELECT * FROM cards WHERE project_id = ?", projectID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer rows.Close() defer rows.Close()
var cards []types.Card var cards []types.FullCard
for rows.Next() { for rows.Next() {
var c types.Card var c types.FullCard
if err := rows.Scan(&c.ID, &c.ProjectID, &c.Title, &c.Content); err != nil { if err := rows.Scan(&c.ID, &c.ProjectID, &c.Title, &c.Content); err != nil {
return nil, err return nil, err
} }
tags, err := GetAllTagsOfCard(c.ID)
if err != nil {
return nil, err
}
c.Tags = tags
cards = append(cards, c) cards = append(cards, c)
} }
@ -39,14 +46,20 @@ func GetAllCardsOf(projectID int) ([]types.Card, error) {
return cards, nil return cards, nil
} }
func GetCard(id int) (*types.Card, error) { func GetCard(id int) (*types.FullCard, error) {
var c types.Card var c types.FullCard
err := db.QueryRow("SELECT * FROM cards WHERE id = ?", id).Scan(&c.ID, &c.ProjectID, &c.Title, &c.Content) err := db.QueryRow("SELECT * FROM cards WHERE id = ?", id).Scan(&c.ID, &c.ProjectID, &c.Title, &c.Content)
if err != nil { if err != nil {
return nil, err return nil, err
} }
tags, err := GetAllTagsOfCard(id)
if err != nil {
return nil, err
}
c.Tags = tags
return &c, nil return &c, nil
} }

View File

@ -6,3 +6,11 @@ type Card struct {
Title string `json:"title"` Title string `json:"title"`
Content string `json:"content"` Content string `json:"content"`
} }
type FullCard struct {
ID int `json:"id"`
ProjectID int `json:"project_id"`
Title string `json:"title"`
Content string `json:"content"`
Tags []FullCardTag `json:"tags"`
}

View File

@ -8,31 +8,21 @@
id: number; id: number;
title: string; title: string;
content: string; content: string;
tags: Tag[];
} }
export let card: Card = { interface Tag {
id: 0,
title: 'No title',
content: 'Nocontent'
};
interface FullTag {
tag_id: number; tag_id: number;
tag_title: string; tag_title: string;
value: string; value: string;
} }
let tags: FullTag[]; export let card: Card = {
id: 0,
onMount(async () => { title: 'No title',
const response = await axios.get(`${backend}/api/cardtags/${card.id}`); content: 'Nocontent',
tags: []
if (response.data.status === 'ok') { };
tags = response.data.data;
} else {
console.error(response.data);
}
});
</script> </script>
<svelte:head> <svelte:head>
@ -41,11 +31,9 @@
<div class="card" draggable={true}> <div class="card" draggable={true}>
<div class="title">{card.title}</div> <div class="title">{card.title}</div>
{#if tags} {#if card.tags}
<div class="tags"> <div class="tags">
<!-- <span class="tag" style="background-color: #874d45;">HIGH</span> {#each card.tags as tag}
<span class="tag" style="background-color: #4a8645;">PERSONAL</span> -->
{#each tags as tag}
<span class="tag" style="border: 1px solid #333">{tag.value}</span> <span class="tag" style="border: 1px solid #333">{tag.value}</span>
{/each} {/each}
</div> </div>

View File

@ -1,22 +1,28 @@
<script lang="ts"> <script lang="ts">
import axios from "axios"; import axios from 'axios';
import { onMount } from "svelte"; import { onMount } from 'svelte';
import Card from "./card.svelte"; import Card from './card.svelte';
export let projectId: number = 0; export let projectId: number = 0;
const backend = 'http://127.0.0.1:3000'; const backend = 'http://127.0.0.1:3000';
interface Project { interface Project {
id: number | undefined, id: number | undefined;
title: string, title: string;
} }
interface Tag {
tag_id: number;
tag_title: string;
value: string;
}
interface Card { interface Card {
id: number, id: number;
title: string, title: string;
content: string, content: string;
tags: Tag[];
} }
let project: Project; let project: Project;
@ -27,14 +33,14 @@
project = response.data; project = response.data;
response = await axios.get(`${backend}/api/cards/${projectId}`) response = await axios.get(`${backend}/api/cards/${projectId}`);
if(response.data.status === "ok") { if (response.data.status === 'ok') {
cards = response.data.data; cards = response.data.data;
} else { } else {
console.error(response.data) console.error(response.data);
} }
}) });
</script> </script>
<svelte:head> <svelte:head>
@ -42,7 +48,7 @@
</svelte:head> </svelte:head>
{#if project} {#if project}
<div id="project"> <div id="project">
<h2>{project.title}</h2> <h2>{project.title}</h2>
<ul> <ul>
@ -52,5 +58,5 @@
{/each} {/each}
{/if} {/if}
</ul> </ul>
</div> </div>
{/if} {/if}