forked from brmlab/brmelect-github
/members
This commit is contained in:
parent
8793ddfef2
commit
bfaffa88bd
1 changed files with 118 additions and 25 deletions
143
src/brmelect.scm
143
src/brmelect.scm
|
|
@ -27,34 +27,127 @@
|
|||
; )
|
||||
|
||||
;; Thread-local parameter to re-use SQLite3 DB handle for subsequent queries
|
||||
(define *cached-brmelect-db* (make-parameter #f))
|
||||
(define =brmelect-db-path= "/home/brmelect/brmelect/brmelect.sqlite3")
|
||||
;(define *cached-brmelect-db* (make-parameter #f))
|
||||
;(define =brmelect-db-path= "/home/brmelect/brmelect/brmelect.sqlite3")
|
||||
|
||||
(define db
|
||||
(connect
|
||||
database: "brmelect"
|
||||
user: "brmelect"
|
||||
password: "brm"
|
||||
host: "localhost"))
|
||||
(define db
|
||||
(connect
|
||||
'((dbname . "brmelect")
|
||||
(user . "brmelectmgr")
|
||||
(host . "localhost"))))
|
||||
|
||||
(define (query-db sql . params)
|
||||
(apply query* db sql params))
|
||||
|
||||
(define (exec sql . params)
|
||||
(apply exec* db sql params))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; helpers
|
||||
(define (param parameters key)
|
||||
(hash-table-ref/default parameters key ""))
|
||||
|
||||
(define (int-param parameters key)
|
||||
(string->number (param parameters key)))
|
||||
|
||||
(define (redirect url)
|
||||
(make-response
|
||||
code: 302
|
||||
headers: `((location . ,url))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; navigation menu
|
||||
(define (layout title body)
|
||||
`@html{
|
||||
@head{
|
||||
@title{,title}
|
||||
}
|
||||
@body{
|
||||
@h1{,title}
|
||||
@nav{
|
||||
@a[href: "/members"]{"Members"} " | "
|
||||
@a[href: "/meetings"]{"Meetings"} " | "
|
||||
@a[href: "/votes"]{"Votes"}
|
||||
}
|
||||
@hr{}
|
||||
,body
|
||||
}})
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; members
|
||||
(define-resource (members "members" parameters)
|
||||
(let ((rows (query-db "SELECT member_id,nick,name,surname FROM brm.members ORDER BY member_id")))
|
||||
(make-html-response
|
||||
200
|
||||
(layout
|
||||
"Members"
|
||||
`@div{
|
||||
;@a[href: "/members/add"]{"Add Member"}
|
||||
@table{
|
||||
@tr{@th{"ID"} @th{"Nick"} @th{"Name"} @th{"Surname"} @th{"Edit"}}
|
||||
,@(row-map*
|
||||
(lambda (id nick name surname)
|
||||
`@tr{@td{,id}@td{,nick}@td{,name}@td{,surname}})
|
||||
rows)
|
||||
}
|
||||
}))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; /members/add
|
||||
;(define-resource (members-add "elect" "members" "add" parameters)
|
||||
; (if (param parameters 'submit)
|
||||
; (begin
|
||||
; (exec
|
||||
; "INSERT INTO brm.members(member_id,nick,name,surname) VALUES($1,$2,$3,$4)"
|
||||
; (int-param parameters 'member_id)
|
||||
; (param parameters 'nick)
|
||||
; (param parameters 'name)
|
||||
; (param parameters 'surname))
|
||||
; (redirect "/members"))
|
||||
; (make-html-response
|
||||
; 200
|
||||
; (layout
|
||||
; "Add Member"
|
||||
; `@form[action: "/members/add" method: "get"]{
|
||||
; "ID:" @input[name: "member_id"]{} @br{}
|
||||
; "Nick:" @input[name: "nick"]{} @br{}
|
||||
; "Name:" @input[name: "name"]{} @br{}
|
||||
; "Surname:" @input[name: "surname"]{} @br{}
|
||||
; @input[type: "submit" name: "submit" value: "Create"]{}
|
||||
; }))))
|
||||
;
|
||||
;; Returns (possibly cached) SQLite3 DB handle
|
||||
(define (brmelect-db)
|
||||
(let ((cdb (*cached-brmelect-db*)))
|
||||
(if cdb
|
||||
cdb
|
||||
(begin
|
||||
(*cached-brmelect-db*
|
||||
(let ((handler (make-busy-timeout 2000)))
|
||||
(let ((db (open-database =brmelect-db-path=)))
|
||||
(set-busy-handler! db handler)
|
||||
db)))
|
||||
(*cached-brmelect-db*)))))
|
||||
;(define (brmelect-db)
|
||||
; (let ((cdb (*cached-brmelect-db*)))
|
||||
; (if cdb
|
||||
; cdb
|
||||
; (begin
|
||||
; (*cached-brmelect-db*
|
||||
; (let ((handler (make-busy-timeout 2000)))
|
||||
; (let ((db (open-database =brmelect-db-path=)))
|
||||
; (set-busy-handler! db handler)
|
||||
; db)))
|
||||
; (*cached-brmelect-db*)))))
|
||||
|
||||
(define (initialize-db)
|
||||
(let ((db (brmelect-db)))
|
||||
;; admin passwords
|
||||
(execute db "create table if not exists admins (login text not null primary key, password text not null)")
|
||||
;; GA
|
||||
(execute db "create table if not exists general_assemblies (id integer primary key, ga_date text not null, ga_open integer not null)")
|
||||
(execute db "insert or ignore into general_assemblies (id, ga_date, ga_open) values (17, '2025-01-21', 1)")
|
||||
;; elections
|
||||
(execute db "create table if not exists elections (id integer primary key autoincrement, ga_id integer not null, election_name text not null, election_running integer not null, election_file text not null, foreign key (ga_id) references general_assemblies(id))")
|
||||
;; candidates
|
||||
(execute db "create table if not exists candidates (id integer primary key autoincrement, election_id integer not null, candidate_name text not null, candidate_nick text not null, foreign key (election_id) references elections(id)")
|
||||
))
|
||||
;(define (initialize-db)
|
||||
; (let ((db (brmelect-db)))
|
||||
; ;; admin passwords
|
||||
; (execute db "create table if not exists admins (login text not null primary key, password text not null)")
|
||||
; ;; GA
|
||||
; (execute db "create table if not exists general_assemblies (id integer primary key, ga_date text not null, ga_open integer not null)")
|
||||
; (execute db "insert or ignore into general_assemblies (id, ga_date, ga_open) values (17, '2025-01-21', 1)")
|
||||
; ;; elections
|
||||
; (execute db "create table if not exists elections (id integer primary key autoincrement, ga_id integer not null, election_name text not null, election_running integer not null, election_file text not null, foreign key (ga_id) references general_assemblies(id))")
|
||||
; ;; candidates
|
||||
; (execute db "create table if not exists candidates (id integer primary key autoincrement, election_id integer not null, candidate_name text not null, candidate_nick text not null, foreign key (election_id) references elections(id)")
|
||||
; ))
|
||||
|
||||
;(initialize-db)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue