payment: note that Stripe has instituted an additional 1% fee for non-US cards
[hcoop/portal.git] / link.sml
CommitLineData
88a858ea
AC
1structure Link :> LINK =
2struct
3
4open Util Sql Init
5
6type link = {id : int, usr : int, title : string, url : string, descr : string}
7
8fun mkLinkRow [id, usr, title, url, descr] =
9 {id = C.intFromSql id, usr = C.intFromSql usr, title = C.stringFromSql title,
10 url = C.stringFromSql url, descr = C.stringFromSql descr}
11 | mkLinkRow row = rowError ("link", row)
12
13fun lookupLink id =
14 mkLinkRow (C.oneRow (getDb ()) ($`SELECT id, usr, title, url, descr
15 FROM Link
16 WHERE id = ^(C.intToSql id)`))
17
18fun mkLinkRow' (name :: rest) = (C.stringFromSql name, mkLinkRow rest)
19 | mkLinkRow' row = Init.rowError ("user'", row)
20
21fun listLinks () =
22 C.map (getDb ()) mkLinkRow' ($`SELECT name, Link.id, usr, title, url, descr
23 FROM Link JOIN WebUser ON usr = WebUser.id
24 ORDER BY title`)
25
26fun listUserLinks usr =
27 C.map (getDb ()) mkLinkRow ($`SELECT id, usr, title, url, descr
28 FROM Link
29 WHERE usr = ^(C.intToSql usr)
30 ORDER BY title`)
31
32fun addLink (usr, title, url, descr) =
33 let
34 val db = getDb ()
35 val id = nextSeq (db, "LinkSeq")
36 in
37 C.dml db ($`INSERT INTO Link (id, usr, title, url, descr)
38 VALUES (^(C.intToSql id), ^(C.intToSql usr), ^(C.stringToSql title), ^(C.stringToSql url), ^(C.stringToSql descr))`);
39 id
40 end
41
42fun modLink (link : link) =
43 let
44 val db = getDb ()
45 in
46 ignore (C.dml db ($`UPDATE Link SET
47 usr = ^(C.intToSql (#usr link)), title = ^(C.stringToSql (#title link)),
48 url = ^(C.stringToSql (#url link)), descr = ^(C.stringToSql (#descr link))
49 WHERE id = ^(C.intToSql (#id link))`))
50 end
51
52fun deleteLink id =
53 ignore (C.dml (getDb ()) ($`DELETE FROM Link WHERE id = ^(C.intToSql id)`))
54
55end