Optimize tags
This commit is contained in:
parent
c4b41d79a2
commit
aaef1cb67d
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"`
|
||||||
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -1,56 +1,62 @@
|
||||||
<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 {
|
||||||
interface Card {
|
tag_id: number;
|
||||||
id: number,
|
tag_title: string;
|
||||||
title: string,
|
value: string;
|
||||||
content: string,
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let project: Project;
|
|
||||||
let cards: Card[];
|
|
||||||
|
|
||||||
onMount(async () => {
|
interface Card {
|
||||||
let response = await axios.get(`${backend}/api/project/${projectId}`);
|
id: number;
|
||||||
|
title: string;
|
||||||
|
content: string;
|
||||||
|
tags: Tag[];
|
||||||
|
}
|
||||||
|
|
||||||
project = response.data;
|
let project: Project;
|
||||||
|
let cards: Card[];
|
||||||
|
|
||||||
response = await axios.get(`${backend}/api/cards/${projectId}`)
|
onMount(async () => {
|
||||||
|
let response = await axios.get(`${backend}/api/project/${projectId}`);
|
||||||
|
|
||||||
if(response.data.status === "ok") {
|
project = response.data;
|
||||||
cards = response.data.data;
|
|
||||||
} else {
|
response = await axios.get(`${backend}/api/cards/${projectId}`);
|
||||||
console.error(response.data)
|
|
||||||
}
|
if (response.data.status === 'ok') {
|
||||||
})
|
cards = response.data.data;
|
||||||
|
} else {
|
||||||
|
console.error(response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<link rel="stylesheet" type="text/css" href="/css/project.css" />
|
<link rel="stylesheet" type="text/css" href="/css/project.css" />
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
{#if project}
|
{#if project}
|
||||||
<div id="project">
|
<div id="project">
|
||||||
<h2>{project.title}</h2>
|
<h2>{project.title}</h2>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{#if cards}
|
{#if cards}
|
||||||
{#each cards as card}
|
{#each cards as card}
|
||||||
<Card {card} />
|
<Card {card} />
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
Loading…
Reference in New Issue