]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Postgres/005.schema.actors.sql
updating SQL to have audit xact ids
[Evergreen.git] / Open-ILS / src / sql / Postgres / 005.schema.actors.sql
1 DROP SCHEMA actor CASCADE;
2
3 BEGIN;
4 CREATE SCHEMA actor;
5
6 CREATE TABLE actor.usr (
7         id                      SERIAL  PRIMARY KEY,
8         usrid                   TEXT    NOT NULL UNIQUE, -- barcode
9         usrname                 TEXT    NOT NULL UNIQUE,
10         email                   TEXT    CHECK (email ~ $re$^[[:alnum:]_\.]+@[[:alnum:]_]+(?:\.[[:alnum:]_])+$$re$),
11         passwd                  TEXT    NOT NULL,
12         prefix                  TEXT,
13         first_given_name        TEXT    NOT NULL,
14         second_given_name       TEXT,
15         family_name             TEXT    NOT NULL,
16         suffix                  TEXT,
17         address                 INT,
18         home_ou                 INT,
19         gender                  CHAR(1) NOT NULL CHECK ( LOWER(gender) IN ('m','f') ),
20         dob                     DATE    NOT NULL,
21         active                  BOOL    NOT NULL DEFAULT TRUE,
22         master_account          BOOL    NOT NULL DEFAULT FALSE,
23         super_user              BOOL    NOT NULL DEFAULT FALSE,
24         usrgoup                 SERIAL  NOT NULL,
25         last_xact_id            TEXT    NOT NULL DEFAULT 'none'
26
27 );
28
29 CREATE FUNCTION actor.crypt_pw_insert () RETURNS TRIGGER AS $$
30         BEGIN
31                 NEW.passwd = MD5( NEW.passwd );
32                 RETURN NEW;
33         END;
34 $$ LANGUAGE PLPGSQL;
35
36 CREATE FUNCTION actor.crypt_pw_update () RETURNS TRIGGER AS $$
37         BEGIN
38                 IF NEW.passwd <> OLD.passwd THEN
39                         NEW.passwd = MD5( NEW.passwd );
40                 END IF;
41                 RETURN NEW;
42         END;
43 $$ LANGUAGE PLPGSQL;
44
45 CREATE TRIGGER actor_crypt_pw_update_trigger
46         BEFORE UPDATE ON actor.usr FOR EACH ROW
47         EXECUTE PROCEDURE actor.crypt_pw_update ();
48
49 CREATE TRIGGER actor_crypt_pw_insert_trigger
50         BEFORE INSERT ON actor.usr FOR EACH ROW
51         EXECUTE PROCEDURE actor.crypt_pw_insert ();
52
53 INSERT INTO actor.usr ( usrid, usrname, passwd, first_given_name, family_name, gender, dob, master_account, super_user )
54         VALUES ( 'admin', 'admin', 'open-ils', 'Administrator', '', 'm', '1979-01-22', TRUE, TRUE );
55
56 CREATE TABLE actor.org_unit_type (
57         id              SERIAL  PRIMARY KEY,
58         name            TEXT    NOT NULL,
59         depth           INT     NOT NULL,
60         parent          INT,
61         can_have_users  BOOL    NOT NULL DEFAULT TRUE
62 );
63
64 INSERT INTO actor.org_unit_type (name, depth, parent, can_have_users) VALUES ( 'Consortium', 0, NULL, FALSE );
65 INSERT INTO actor.org_unit_type (name, depth, parent, can_have_users) VALUES ( 'System', 1, 1, FALSE );
66 INSERT INTO actor.org_unit_type (name, depth, parent, can_have_users) VALUES ( 'Branch', 2, 2, TRUE );
67 INSERT INTO actor.org_unit_type (name, depth, parent, can_have_users) VALUES ( 'Sub-lib', 3, 3, TRUE );
68
69 CREATE TABLE actor.org_unit (
70         id              SERIAL  PRIMARY KEY,
71         parent_ou       INT,
72         ou_type         INT     NOT NULL,
73         address         INT     NOT NULL,
74         name1           TEXT    NOT NULL,
75         name2           TEXT
76 );
77
78 CREATE TABLE actor.usr_access_entry (
79         id              BIGSERIAL       PRIMARY KEY,
80         usr             INT,
81         org_unit        INT,
82         CONSTRAINT usr_once_per_ou UNIQUE (usr,org_unit)
83 );
84
85
86 CREATE TABLE actor.perm_group (
87         id      SERIAL  PRIMARY KEY,
88         name    TEXT    NOT NULL,
89         ou_type INT,
90 );
91
92 CREATE TABLE actor.permission (
93         id              SERIAL  PRIMARY KEY,
94         name            TEXT    NOT NULL UNIQUE,
95         code            TEXT    NOT NULL UNIQUE
96 );
97
98 CREATE TABLE actor.perm_group_permission_map (
99         permission      INT,
100         perm_group      INT,
101         CONSTRAINT perm_once_per_group PRIMARY KEY (permission, perm_group)
102 );
103
104 CREATE TABLE actor.perm_group_usr_map (
105         usr             INT,
106         perm_group      INT,
107         CONSTRAINT usr_once_per_group PRIMARY KEY (usr, perm_group)
108 );
109
110 CREATE TABLE actor.usr_address (
111         id              SERIAL  PRIMARY KEY,
112         valid           BOOL    NOT NULL DEFAULT TRUE,
113         usr             INT,
114         street1         TEXT    NOT NULL,
115         street2         TEXT,
116         county          TEXT    NOT NULL,
117         state           TEXT    NOT NULL,
118         country         TEXT    NOT NULL,
119         post_code       TEXT    NOT NULL
120 );
121
122 COMMIT;