Implement need-help feature

This commit is contained in:
nemunaire 2022-03-02 02:09:45 +01:00
parent 41202806ea
commit 4b64b91473
3 changed files with 104 additions and 13 deletions

12
db.go
View File

@ -168,6 +168,18 @@ CREATE TABLE IF NOT EXISTS survey_asks(
FOREIGN KEY(id_user) REFERENCES users(id_user),
FOREIGN KEY(id_survey) REFERENCES surveys(id_survey)
) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;
`); err != nil {
return err
}
if _, err := db.Exec(`
CREATE TABLE IF NOT EXISTS user_need_help(
id_need_help INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_user INTEGER NOT NULL,
date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
comment TEXT NOT NULL,
date_treated TIMESTAMP NULL,
FOREIGN KEY(id_user) REFERENCES users(id_user)
) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;
`); err != nil {
return err
}

56
help.go Normal file
View File

@ -0,0 +1,56 @@
package main
import (
"time"
"github.com/julienschmidt/httprouter"
)
func init() {
router.POST("/api/help", apiAuthHandler(func(u *User, ps httprouter.Params, body []byte) HTTPResponse {
return formatApiResponse(u.NewNeedHelp())
}, loggedUser))
}
type NeedHelp struct {
Id int64 `json:"id"`
IdUser int64 `json:"id_user"`
Date time.Time `json:"date"`
Comment string `json:"comment,omitempty"`
DateTreated *time.Time `json:"treated,omitempty"`
}
func (u *User) NewNeedHelp() (NeedHelp, error) {
if res, err := DBExec("INSERT INTO user_need_help (id_user, comment) VALUES (?, ?)", u.Id, ""); err != nil {
return NeedHelp{}, err
} else if hid, err := res.LastInsertId(); err != nil {
return NeedHelp{}, err
} else {
return NeedHelp{hid, u.Id, time.Now(), "Ton appel a bien été entendu.", nil}, nil
}
}
func (h *NeedHelp) Update() error {
_, err := DBExec("UPDATE user_need_help SET id_user = ?, date = ?, comment = ?, date_treated = ? WHERE id_need_help = ?", h.IdUser, h.Date, h.Comment, h.DateTreated, h.Id)
return err
}
func (h *NeedHelp) Delete() (int64, error) {
if res, err := DBExec("DELETE FROM user_need_help WHERE id_need_help = ?", h.Id); err != nil {
return 0, err
} else if nb, err := res.RowsAffected(); err != nil {
return 0, err
} else {
return nb, err
}
}
func ClearNeedHelp() (int64, error) {
if res, err := DBExec("DELETE FROM user_need_help"); err != nil {
return 0, err
} else if nb, err := res.RowsAffected(); err != nil {
return 0, err
} else {
return nb, err
}
}

View File

@ -1,6 +1,27 @@
<script>
function needhelp() {
import { user } from '../stores/user';
import { ToastsStore } from '../stores/toasts';
function needhelp() {
fetch('api/help', {
method: 'POST',
}).then((response) => {
response.json().then((data) => {
ToastsStore.addToast({
color: "info",
title: "Assistance",
msg: data.comment,
});
})
}, (response) => {
pleaseWait = false;
if (response.data)
ToastsStore.addToast({
color: "danger",
title: "Une erreur s'est produite",
msg: (response.data ? response.data.errmsg : "Impossible de contacter le serveur"),
});
});
}
</script>
@ -22,19 +43,21 @@
<p>
Si tu souhaites me parler d'une situation qui t'a troublé&middot;e, d'un problème que tu rencontres ou me faire une remarque,
n'hésite pas à venir me voir lors d'un cours, par exemple à la pause ou à la fin&nbsp;;
je suis aussi joignable <a href="mailto:nemunaire@nemunai.re">par e-mail</a> ou bien <a href="https://matrix.to/#/@nemunaire:nemunai.re">sur Matrix</a> ou Teams.
n'hésite pas à venir me voir lors d'un cours, par exemple à la pause ou à la fin{#if $user}&nbsp;;
je suis aussi joignable <a href="mailto:nemunaire@nemunai.re">par e-mail</a> ou bien <a href="https://matrix.to/#/@nemunaire:nemunai.re">sur Matrix</a> ou Teams{/if}.
</p>
<p class="mt-4">
Si tu souhaites juste avoir un peu plus d'attention, soit parce que tu te sens à l'écart, en difficulté ou autre&nbsp;:
<button
type="button"
class="btn btn-sm btn-primary"
on:click={needhelp}
>
Clique ce bouton
</button>
</p>
{#if $user}
<p class="mt-4">
Si tu souhaites juste avoir un peu plus d'attention, soit parce que tu te sens à l'écart, en difficulté ou autre&nbsp;:
<button
type="button"
class="btn btn-sm btn-primary"
on:click={needhelp}
>
Clique ce bouton
</button>
</p>
{/if}
<div class="mb-5"></div>