teacup/setup-db.xqm

120 lines
4.5 KiB
Plaintext
Raw Permalink Normal View History

2021-12-15 11:29:23 +00:00
import module namespace config = 'http://www.rave-tech.com/bloomsbury/config' at './module/config.xqm';
declare variable $databasName := $config:CoreDatabase;
declare variable $userDirectory := $config:UserDir;
declare variable $validationdirectory := $config:ValidationDir;
declare variable $transformDirctory := $config:TransformDir;
declare variable $Configfiles := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\config';
declare variable $schemadirectory := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\schemas';
declare variable $rncdirectory := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\rnc';
declare variable $xslt := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\transforms';
declare variable $OrgChart := 'C:\Program Files (x86)\BaseX\webapp\eBloomsbury\config\organization_chart.xml';
(: Create database :)
if($databasName)
then update:output("database already exists")
else
(
db:create($databasName, (), (), ()),
update:output("Database Created")
)
,
(: Ingest Config files :)
for $files in file:children($Configfiles)
let $uri := fn:concat($config:ConfigDir,fn:tokenize($files,'\\')[fn:last()])
return
(
db:replace($databasName,$uri,fn:doc($files)),
update:output("Config files ingested")
)
,
(: Create User :)
if(db:open($databasName)/user[1])
then
for $AdminUserId in fn:collection(fn:concat($databasName,'/user'))/user[role='admin'][fn:not(fn:matches(fn:base-uri(.),'(/version/|/audit/)'))]/id/text()
let $UserXml := fn:doc(fn:concat($databasName,$config:UserDir,$AdminUserId,'.xml'))
let $userUri := fn:concat($config:UserDir,$AdminUserId,'.xml')
(:let $OrgChunk :=
for $area in fn:doc($OrgChart)/taxonomy/descendant::*:facet/@xml:id/string()
let $result := if($area=$UserXml/user/departments/department/text()) then () else <department>{$area}</department>
return $result:)
let $OrgChunk := <departments>
{
for $area in fn:doc($OrgChart)/taxonomy/descendant::*:facet/@xml:id/string()
let $depatment := <department>{$area}</department>
return $depatment
}
</departments>
let $UpdatedUserXml := copy $c := fn:doc(fn:concat($databasName,$config:UserDir,$AdminUserId,'.xml'))
modify
(
replace node $c/user/departments with $OrgChunk
)
return $c
return
db:replace($databasName, $userUri, $UpdatedUserXml)
else
let $userID := fn:concat($config:UserIDPrefix,fn:string(convert:dateTime-to-integer(adjust-dateTime-to-timezone(convert:integer-to-dateTime(prof:current-ms())))))
let $userUri := fn:concat($userDirectory,$userID,'.xml')
let $userXml := <user><id>{$userID}</id><name>Bloomsbury</name><email>admin@bloomsbury.com</email><created>{fn:current-dateTime()}</created><updated>{fn:current-dateTime()}</updated><locked>No</locked><password-updated>{fn:current-dateTime()}</password-updated><role>admin</role><active>Yes</active></user>
return
(
db:add($databasName, $userXml, $userUri),
user:create($userXml/email/text(), 'admin', 'admin'),
update:output("user created"),
let $auditChunk := <audit>
<id>{random:uuid()}</id>
<requester-id>bloomsbury</requester-id>
<requester-email>admin@bloomsbury.com</requester-email>
<type>'user create'</type>
<date-time>{fn:adjust-dateTime-to-timezone(convert:integer-to-dateTime(prof:current-ms()))}</date-time>
</audit>
let $auditUri := fn:concat('/user/audit/',$userID,'_audit.xml')
return
if(db:open($databasName,$auditUri))
then insert node $auditChunk as last into db:open($config:CoreDatabase,$config:AuditDir)/audits
else db:add($databasName,<audits failed-logins='0'>{$auditChunk}</audits>,$auditUri)
)
,
(: Ingest schema files :)
for $file in file:children($schemadirectory)
let $uri := fn:concat('/validation/',fn:tokenize($file,'\\')[fn:last()])
return
if(fn:ends-with(fn:lower-case($file),'.rnc'))
then
(
db:store($databasName,$uri, file:read-text($file)),
update:output("***Setup -- Validation file uploaded : " ||$file|| "***")
)
else
(
db:replace($databasName,$uri,fn:doc($file)),
update:output("***Setup -- Validation file uploaded : " ||$file|| "***")
)
,
(: Ingest XSLT files :)
for $files in file:children($xslt)
let $uri := fn:concat($transformDirctory,fn:tokenize($files,'\\')[fn:last()])
return
(
db:replace($databasName,$uri,fn:doc($files)),
update:output('XSLT files ingested')
)