From 75d63e0c89ca9a3a6fd06b5b6f1176b013f9fe83 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 27 Jul 2024 23:06:04 +0200 Subject: [PATCH] work in progress: storage/msglog: table creation OK --- core/message.lisp | 3 +-- scopes.asd | 7 ++++--- storage/msglog.lisp | 19 +++++++++++++++++++ storage/tracking.lisp | 5 +++-- test/test-storage.lisp | 12 ++++++++++++ 5 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 storage/msglog.lisp diff --git a/core/message.lisp b/core/message.lisp index 162b6bd..cb6faed 100644 --- a/core/message.lisp +++ b/core/message.lisp @@ -12,8 +12,7 @@ (defclass message (shape:record) ((shape:head-fields :initform '(:domain :action :class :item)) - (sender :reader sender :initarg :sender :initform nil) - (timestamp))) + (sender :reader sender :initarg :sender :initform nil))) (defun create (head &key data sender) (make-instance 'message :head head :data data :sender sender)) diff --git a/scopes.asd b/scopes.asd index b204ac2..22d9ff7 100644 --- a/scopes.asd +++ b/scopes.asd @@ -6,9 +6,10 @@ :version "0.0.1" :homepage "https://www.cyberconcepts.org" :description "Generic data processing." - :depends-on (:dbi :sxql - :scopes-core :scopes-web) - :components ((:file "storage/storage") + :depends-on (:scopes-core :scopes-web + :dbi :sxql) + :components ((:file "storage/msglog" :depends-on ("storage/tracking")) + (:file "storage/storage") (:file "storage/tracking" :depends-on ("storage/storage"))) :long-description "scopes: generic data processing facilities." ;;#.(uiop:read-file-string diff --git a/storage/msglog.lisp b/storage/msglog.lisp new file mode 100644 index 0000000..ab2d0d7 --- /dev/null +++ b/storage/msglog.lisp @@ -0,0 +1,19 @@ +;;;; cl-scopes/storage/msglog - storing message data in a SQL database + +(defpackage :scopes/storage/msglog + (:use :common-lisp) + (:local-nicknames (:message :scopes/core/message) + (:storage :scopes/storage) + (:tracking :scopes/storage/tracking)) + (:export #:make-container #:save)) + +(in-package :scopes/storage/msglog) + +(defclass pmsg (message:message tracking:track) ()) + +(defun make-container (storage) + (make-instance 'tracking:container + :item-class 'pmsg + :table-name :messages + :indexes '((domain action class item)) + :storage storage)) diff --git a/storage/tracking.lisp b/storage/tracking.lisp index 1c8bd86..97ae5e6 100644 --- a/storage/tracking.lisp +++ b/storage/tracking.lisp @@ -9,6 +9,7 @@ (:jzon :com.inuoe.jzon)) (:export #:track #:trackid #:time-stamp #:container #:insert + #:item-class #:table-name #:indexes #:storage #:make-item #:get-track #:create-indexes #:create-table)) @@ -25,8 +26,8 @@ (defclass container () ((item-class :reader item-class :initarg :item-class :initform 'track) - (table-name :reader table-name :initform :tracks) - (indexes :reader indexes :initform '((taskid username) (username))) + (table-name :reader table-name :initarg :table-name :initform :tracks) + (indexes :reader indexes :initarg :indexes :initform '((taskid username) (username))) (storage :reader storage :initarg :storage))) (defun item-head-fields (cont) diff --git a/test/test-storage.lisp b/test/test-storage.lisp index 21a350c..cab85b3 100644 --- a/test/test-storage.lisp +++ b/test/test-storage.lisp @@ -7,6 +7,8 @@ (:local-nicknames (:config :scopes/config) (:core :scopes/core) (:logging :scopes/logging) + (:message :scopes/core/message) + (:msglog :scopes/storage/msglog) (:shape :scopes/shape) (:storage :scopes/storage) (:tracking :scopes/storage/tracking) @@ -34,6 +36,7 @@ (core:setup-services) (let ((ctx (core:find-service :storage))) (test-track ctx) + (test-msglog ctx) (t:show-result))) (deftest test-track (ctx) @@ -55,3 +58,12 @@ (== (shape:head tr2) '("t01" "john")) (== (gethash :desc (shape:data tr2)) "scopes/storage: queries") )) + +(deftest test-msglog (ctx) + (let ((st (storage:storage ctx)) + (data (make-hash-table)) + cont msg) + (setf cont (msglog:make-container st)) + (storage:drop-table st :messages) + (tracking:create-table cont) + ))