App-Dochazka-CLI
view release on metacpan or search on metacpan
lib/App/Dochazka/CLI/Testers.pm view on Meta::CPAN
...
For fun, try out various silly ideas:
Dochazka(2016-02-02) root ADMIN> PUT activity aid 9 { "code" : "Bikeshed" }
...
Dochazka(2016-02-02) root ADMIN> PUT activity aid 9 { "code" : "Bike shed" }
...
Dochazka(2016-02-02) root ADMIN> PUT activity aid 9 { "aid" : 100 }
...
Dochazka(2016-02-02) root ADMIN> PUT activity aid 9 { "aid" : null }
...
Dochazka(2016-02-02) root ADMIN> PUT activity aid 9 { "remark" : null }
...
=head2 Delete an activity
OK, now we've had our fun. Delete this fiasco and get back to work!
Dochazka(2016-02-02) root ADMIN> DELETE activity aid 9
...
The activity can be deleted because no attendance intervals point to it.
=head1 SESSION 7: ATTENDANCE INTERVALS
Before you do anything, L<make sure the server is running|"Start the server">.
=head2 Verify state
If you are continuing from Session 6, you can skip this step.
If you are starting over (or from scratch), run the following script to
bring your database into the proper state:
#!/bin/sh
cat <<EOF | dochazka-cli -u root -p immutable
PUT employee nick george { "fullname" : "King George III", "salt" : "a054d158a23c3a07ad0163107ad72a8649597d71", "passhash" : "5cf2c3a23de9db43d2d846172966150e9197717ecd0304bafef3f23fc159df942021dd3aec7b4dbcde87d8a44c1bd905bbba3862989065d012bb46a1...
emp=george active 2015-01-02
schedule mon 8:00-12:00
schedule tue 13:00-17:00
schedule wed 8:00-12:00
schedule wed 13:00-17:00
schedule thu 7:00-10:00
schedule scode VPP-1
schedule new
emp=george scode=VPP-1 2015-01-02
EOF
=head2 Add a single attendance interval
Finally, we have completed all the administrative setup work necessary for
employees (or their private secretaries) to be able to start entering
attendance data.
Let's say that George spent the whole morning pushing pencils. This can be
entered into the database like so:
$ dochazka-cli -u george -p george
...
Dochazka(2016-02-03) george ACTIVE> interval 8:00-12:00 work Push pencils
Interval IID 1
["2016-02-03 08:00:00+01","2016-02-03 12:00:00+01") WORK Push pencils
The server response includes the Interval ID (IID), the full canonical
"tsrange with time zone" (see PostgreSQL documentation for details), the
activity (WORK), and the description ("Push pencils") entered by the user.
The first interval object is now in the database. Let's examine it:
Dochazka(2016-02-03) george ACTIVE> GET interval iid 1
HTTP status: 200 OK
Response:
{
"level" : "OK",
"code" : "DISPATCH_INTERVAL_FOUND",
"payload" : {
"long_desc" : "Push pencils",
"partial" : null,
"intvl" : "[\"2016-02-03 08:00:00+01\",\"2016-02-03 12:00:00+01\")",
"iid" : 1,
"aid" : 1,
"remark" : null,
"eid" : 3,
"code" : null
},
"text" : "Found an interval"
}
The attributes under the "payload" are from the interval object. The "code"
attribute is null in this case because it is not stored in the database. It is
populated on an as-needed basis.
=head2 Modify an interval
We can modify intervals in the same way that we modified the "bike shed"
activity:
Dochazka(2016-02-03) george ACTIVE> PUT interval iid 1 { "remark" : "BIKESHED" }
...
We can even set the "code" attribute to a bogus value in this way:
Dochazka(2016-02-03) george ACTIVE> PUT interval iid 1 { "code" : "BIKESHED" }
...
It does not get stored in the database, however:
Dochazka(2016-02-03) george ACTIVE> GET interval iid 1 { "code" : "BIKESHED" }
HTTP status: 200 OK
Response:
...
"code" : null,
...
( run in 2.599 seconds using v1.01-cache-2.11-cpan-941387dca55 )