Can mark need help as treated

This commit is contained in:
nemunaire 2022-09-01 14:10:05 +02:00
parent bb7c4f32e4
commit 9c0e35b1e2
3 changed files with 68 additions and 6 deletions

View File

@ -12,7 +12,7 @@ import (
func declareAPIAdminHelpRoutes(router *gin.RouterGroup) {
router.GET("/help", func(c *gin.Context) {
nhs, err := getNeedHelps()
nhs, err := getNeedHelps("WHERE date_treated IS NULL")
if err != nil {
log.Println("Unable to getNeedHelps:", err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during need helps retrieval. Please retry."})
@ -82,8 +82,8 @@ type NeedHelp struct {
DateTreated *time.Time `json:"treated,omitempty"`
}
func getNeedHelps() (nh []NeedHelp, err error) {
if rows, errr := DBQuery("SELECT id_need_help, id_user, date, comment, date_treated FROM user_need_help"); errr != nil {
func getNeedHelps(cond string) (nh []NeedHelp, err error) {
if rows, errr := DBQuery("SELECT id_need_help, id_user, date, comment, date_treated FROM user_need_help " + cond); errr != nil {
return nil, errr
} else {
defer rows.Close()

View File

@ -51,10 +51,51 @@ export async function getUserScore(uid, survey) {
}
}
export class UserNeedingHelp {
constructor(res) {
if (res) {
this.update(res);
}
}
update({ id, id_user, date, comment, treated }) {
this.id = id;
this.id_user = id_user;
this.date = new Date(date);
this.comment = comment;
if (treated) {
this.treated = new Date(treated);
} else {
this.treated = null;
}
}
mark_treated() {
this.treated = new Date();
}
async save() {
const res = await fetch(this.id?`api/help/${this.id}`:'api/help', {
method: this.id?'PUT':'POST',
headers: {'Accept': 'application/json'},
body: JSON.stringify(this),
});
if (res.status == 200) {
const data = await res.json()
this.update(data);
return data;
} else {
throw new Error((await res.json()).errmsg);
}
}
}
export async function getUserNeedingHelp() {
const res = await fetch(`api/help`, {headers: {'Accept': 'application/json'}})
if (res.status == 200) {
return await res.json();
return (await res.json()).map((nh) => {
return new UserNeedingHelp(nh)
});
} else {
throw new Error((await res.json()).errmsg);
}

View File

@ -1,10 +1,24 @@
<script lang="ts">
import { user } from '../stores/user';
import { getUser, getUserNeedingHelp } from '../lib/users';
import DateFormat from '../components/DateFormat.svelte';
import SurveyList from '../components/SurveyList.svelte';
import ValidateSubmissions from '../components/ValidateSubmissions.svelte';
let direct = null;
let users_needing_help = [];
$: if ($user && $user.is_admin) {
users_needing_help = getUserNeedingHelp();
}
async function mark_needhelp_treated(unh) {
unh.mark_treated();
unh.save().then(() => {
users_needing_help = getUserNeedingHelp();
});
}
</script>
<div class="card bg-light">
@ -29,7 +43,7 @@
{#if $user.is_admin}
<p class="lead">Demande d'aide&nbsp;:</p>
{#await getUserNeedingHelp()}
{#await users_needing_help}
<span class="spinner-border spinner-border" role="status" aria-hidden="true"></span>
{:then nhs}
<ul style="columns: 2">
@ -40,7 +54,14 @@
{:then u}
<a href="users/{u.id}">{u.login}</a>
{/await}
({user.date})
(<DateFormat date={user.date} dateStyle="medium" timeStyle="medium" />)
<button
type="button"
class="btn btn-sm btn-info"
on:click={e => {mark_needhelp_treated(user)}}
>
<i class="bi bi-check" title="Marquer la demande d'aide comme traîtée"></i>
</button>
</li>
{/each}
</ul>