diff options
| author | ckonstanski <kostcarl@isu.edu> | 2026-07-19 22:05:02 -0600 |
|---|---|---|
| committer | ckonstanski <kostcarl@isu.edu> | 2026-07-19 22:05:02 -0600 |
| commit | e7301bcd63c0cbfc4d55f21d0d7c33c7557d6444 (patch) | |
| tree | 2fc51725eb8931c09df6d9360bb358e7645a5244 /lisp/service | |
| parent | 08e435104c42751689553537b1f20ffb14b8dfcc (diff) | |
starting resume logic
Diffstat (limited to 'lisp/service')
| -rw-r--r-- | lisp/service/about-us-service.lisp | 4 | ||||
| -rw-r--r-- | lisp/service/menu-service.lisp | 4 | ||||
| -rw-r--r-- | lisp/service/resume-service.lisp | 122 |
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.")))))) |
