summaryrefslogtreecommitdiff
path: root/lisp/service
diff options
context:
space:
mode:
authorckonstanski <kostcarl@isu.edu>2026-07-19 22:05:02 -0600
committerckonstanski <kostcarl@isu.edu>2026-07-19 22:05:02 -0600
commite7301bcd63c0cbfc4d55f21d0d7c33c7557d6444 (patch)
tree2fc51725eb8931c09df6d9360bb358e7645a5244 /lisp/service
parent08e435104c42751689553537b1f20ffb14b8dfcc (diff)
starting resume logic
Diffstat (limited to 'lisp/service')
-rw-r--r--lisp/service/about-us-service.lisp4
-rw-r--r--lisp/service/menu-service.lisp4
-rw-r--r--lisp/service/resume-service.lisp122
3 files changed, 126 insertions, 4 deletions
diff --git a/lisp/service/about-us-service.lisp b/lisp/service/about-us-service.lisp
index c479efe..71b5b70 100644
--- a/lisp/service/about-us-service.lisp
+++ b/lisp/service/about-us-service.lisp
@@ -9,8 +9,10 @@
:accessor category))
(:documentation ""))
-(defun about-us-json (category)
+(defun about-us-json (category &optional message errormsg)
(with-noauth (instance about-us-service)
+ (when (not (org-ckons-core::null-or-empty-p message)) (setf (message instance) message))
+ (when (not (org-ckons-core::null-or-empty-p errormsg)) (setf (errormsg instance) errormsg))
(setf (category instance) category)))
(defclass about-us/view-service (about-us-service)
diff --git a/lisp/service/menu-service.lisp b/lisp/service/menu-service.lisp
index e7af0c3..6e97992 100644
--- a/lisp/service/menu-service.lisp
+++ b/lisp/service/menu-service.lisp
@@ -4,9 +4,7 @@
(in-package :resume)
(defparameter *menu-config* '((:id "a_menu_home" :label "Home" :handler "/home" :permissions "_Public")
- (:id "a_menu_lessons" :label "About the Studio" :handler "/lessons" :permissions "_Public")
- (:id "a_menu_gigs" :label "For Hire" :handler "/gigs" :permissions "_Public")
- (:id "a_menu_programming" :label "Software Consulting" :handler "/programming" :permissions "_Public")
+ (:id "a_menu_resumes" :label "Resumes" :handler "/resumes" :permissions "resume-view")
(:id "a_menu_contact_us" :label "Contact Me" :handler "/contact-us" :permissions "_Public")
(:id "a_menu_messages" :label "Messages" :handler "/messages" :permissions "messages-view")
(:id "a_menu_users" :label "Users" :handler "/users" :permissions "users-view")))
diff --git a/lisp/service/resume-service.lisp b/lisp/service/resume-service.lisp
new file mode 100644
index 0000000..2da011a
--- /dev/null
+++ b/lisp/service/resume-service.lisp
@@ -0,0 +1,122 @@
+;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+(declaim (optimize (speed 0) (safety 3) (debug 3)))
+
+(in-package :resume)
+
+(defclass resumes-service (auth-service)
+ ((title :initarg :title
+ :initform nil
+ :accessor title))
+ (:documentation ""))
+
+(defun resumes-json ()
+ (with-auth (instance resumes-service "resume-view")
+ (setf (title instance) "Resumes")))
+
+(defclass resumes/view-service (resumes-service resume)
+ ((resumes :initarg :resumes
+ :initform nil
+ :accessor resumes)
+ (location-p :initform nil))
+ (:documentation ""))
+
+(defun resumes-view-json ()
+ (with-auth (instance resumes/view-service "resume-view")
+ (with-resume-database
+ (let ((resume-pkg (make-instance 'resume-pkg))
+ (user (get-user)))
+ (setf (resumes instance) (get-all-resumes-for-user resume-pkg user))))
+ (sanitize-rest-json instance)
+ (loop for resume in (resumes instance)
+ do (sanitize-json resume))))
+
+(defclass resumes/add-service (resumes/view-service)
+ ((form :initarg :form
+ :initform nil
+ :accessor form))
+ (:documentation ""))
+
+(defun resumes-add-json ()
+ (with-auth (instance resumes/add-service "resume-modify")
+ (setf (title instance) "Resume - Add")
+ (setf (form instance) (make-form "resumes-add-form"
+ nil
+ t
+ `((:name "name" :label "Name" :field-type "text" :required "required")
+ (:label "Add Resume" :field-type "button" :onclick "on_resumes_add_submit_clicked()"))))))
+
+(defun resumes-add-submit-json (name)
+ (declare (special name))
+ (with-auth (instance resumes/add-service "resume-modify")
+ (with-resume-database
+ (handler-case
+ (let* ((resume-pkg (make-instance 'resume-pkg))
+ (user (get-user))
+ (resume (make-instance 'resume :user_id (id user) :name name)))
+ (insert-resume resume-pkg resume)
+ (setf (session-value :message) (format nil "Resume \"~a\" created successfully." (name resume))))
+ (error (e)
+ (setf (session-value :errormsg) (format nil "Error creating resume \"~a\". ~a" name e)))))))
+
+(defclass resumes/modify-service (resumes/add-service)
+ ()
+ (:documentation ""))
+
+(defun resumes-modify-json (id)
+ (with-auth (instance resumes/modify-service "resume-modify")
+ (setf (title instance) "Resume - Modify")
+ (with-resume-database
+ (let* ((resume-pkg (make-instance 'resume-pkg))
+ (me (get-resume))
+ (resume (get-resume-by-id resume-pkg id))
+ (role-groups (get-all-role-groups resume-pkg me))
+ (active-role-groups (get-active-role-groups resume-pkg resume)))
+ (if resume
+ (setf (form instance) (make-form "resumes-modify-form"
+ nil
+ t
+ `((:name "id" :field-type "hidden" :value ,(id resume) :required "required")
+ (:name "name" :label "Name" :field-type "text" :value ,(name resume) :required "required")
+ (:label "Modify Resume" :field-type "button" :onclick "on_resumes_modify_submit_clicked()"))))
+ (setf (session-value :errormsg) "Error: could not modify resume. Not found."))))))
+
+(defun resumes-modify-submit-json (id role_groups resumename first_name last_name email phone)
+ (declare (special role_groups resumename first_name last_name email phone))
+ (with-auth (instance resumes/modify-service "resume-modify")
+ (with-resume-database
+ (let* ((resume-pkg (make-instance 'resume-pkg))
+ (resume (get-active-resume-by-id resume-pkg id)))
+ (if resume
+ (progn
+ (loop for param in (remove-if (lambda (x)
+ (intersection `(,x) '(id role_groups)))
+ (sb-introspect:function-lambda-list #'resumes-modify-submit-json))
+ do (setf (slot-value resume param) (symbol-value param)))
+ (update-resume resume-pkg resume)
+ (delete-role-groups resume-pkg resume)
+ (loop for role-group in (union '("profile-admin")
+ (cl-ppcre:split "\\|" role_groups)
+ :test 'string=)
+ do (insert-resume-role-group resume-pkg (make-instance 'resume-role
+ :resume_id (id resume)
+ :role_group_name role-group)))
+ (setf (session-value :message) "Resume saved successfully."))
+ (setf (session-value :errormsg) "An error occured."))))))
+
+(defclass resumes/delete-service (resumes/add-service)
+ ()
+ (:documentation ""))
+
+(defun resumes-delete-json (id)
+ (with-auth (instance resumes/delete-service "resume-modify")
+ (with-resume-database
+ (let* ((resume-pkg (make-instance 'resume-pkg))
+ (resume (get-resume-by-id resume-pkg id)))
+ (if resume
+ (if (= (id resume) (id (get-resume)))
+ (setf (session-value :errormsg) "Error: you may not delete yourself.")
+ (progn
+ (deactivate-resume resume-pkg resume)
+ (setf (session-value :errormsg) nil)
+ (setf (session-value :message) "Resume deleted successfully.")))
+ (setf (session-value :errormsg) "Error: could not delete resume: not found."))))))