-
Notifications
You must be signed in to change notification settings - Fork 2
MFCS Roadmap:
This document will be an explanation of all components and features recognized in the current version of MFCS. The contents will explain how it works currently in the ruby version and describe what needs to be done to finish the feature in the ruby version of MFCS. You can use the Table of Contents to get to linked content structures of the document.
- Database Structures
- Authentication
- Form Builder
- Validation
- System IDNO
- Uploads
- Permissions
- Search
- Watermarks
- Menu
- Background Jobs
- Conversions
- Notifications
- System Tools
- Toggles in and out of readonly mode which will allow you to read and search, but not modify any data.
- User Administration
- Creates a way to manage users allowed to access the system
- System Users and OAuth (WVU Login)
- Watermarking
- Create, Read, Update, and Delete Watermarks for converted images.
- Project Assignment
- Create, Read, Update, and Delete of Project Tags for new Forms.
- Allows project tags to be added to Items and Forms
- Searchable Project tags for export
- The database structures are mostly the same, except for CamelCase values are being changed to snake_case.
- The biggest change in structure is the hashing is now JSONB.
- Performance Upgrades
- FormBuilder Views (Use background jobs to make views of the form builder objects).
- Create an abstract class that uses background view objects for search, view, etc.
- The database structures will need imported from MFCS (PROD), to MFCS (RUBY). To do this you will need to review the schema and make adjustments for the data as needed.
- Once all schemas and models are configured to the production data, it would be best to use the models in an import script so that any and all callbacks are completed. This will ensure background jobs and enqueued and other processes are started (ex: conversion, archive, working files, etc).
- The database structures will need imported from MFCS (PROD), to MFCS (RUBY). To do this you will need to review the schema and make adjustments for the data as needed.
- Once all schemas and models are configured to the production data, it would be best to use the models in an import script so that any and all callbacks are completed. This will ensure background jobs and enqueued and other processes are started (ex: conversion, archive, working files, etc).
- Authentication is mostly complete, but needs tested with the University CAS system.
- The implementation was tested on Dev, before they removed the dev server because of COVID pressures.
- User's Model Implementing Devise
- Configuration for Cas
- Controller Implementation
- Arguably the most important part of MFCS.
- Create and manage Digital Object and Metadata Forms
- Metadata Forms are essentially controlled vocabulary for various headings (subject, topical, etc)
- Custom forms allow you to use any metadata schema for digital assets, or mix and match schemas
- Allows you to add metadata mappings for exporting to match multiple schemas
- Accessible Interface for both Digital Object Metadata form creation
-
Custom Fields
- Apply CSS Classes, IDs, Local styles to form elements.
- Set Default values with variable data (dates, times, etc)
- Standard Validation
- Complex Validation using Regular Expressions
- Specify Required, Readonly, and other state specific displays an validations.
- Unique IDNO numbers
- System Created using a pattern ex
test_######
would yieldtest_000001
extending the pattern as needed. - User supplied IDNO which checks against duplication
- System Created using a pattern ex
- Form builder is completed, however there may be unexpected bugs in building the form when edited, or when page is refreshed.
- HTML/JS located in the
app/frontend/components/form_builder
- Stimulus JS located in
app/frontend/controllers
- This component of form builder is not complete. The interface currently establishes this as a list of items that is built along with the form using a tab system. I think this is poorly done because if the form is not accepted all the work will have to be redone. We need a better system for building form navigation. Possible need for drag and drop system created in the form builder too.
- The form builder uses templates to keep down redundancy and to break up the HTML.
- The Form Builder is built using Stimulus JS, HTML, and Ruby.
- Most of the HTML templates are used in the preview of the form builder in this aspect.
- Location
app/frontend/components/form_builder/fields
- These are the interfaces for the administration who is creating the form, so these templates are what the user interacts with to determine which fields they are putting into the form. It also has the data-controllers for the stimulus that drives multiple interactions and building of data structures for the form submissions.
- Complete, but not tested using BDD methods.
- Needs tested using BDD because of the nature of these methods. There is a potential that switching these to view components we could avoid having to test with BDD methods, but it is doubtful because of JavaScript interactions that need to take place.
- Location
app/frontend/components/form_builder/fields
- These are the interfaces for the administration who is creating the form, so these templates are what the user interacts with to determine which fields they are putting into the form. It also has the data-controllers for the stimulus that drives multiple interactions and building of data structures for the form submissions.
- Complete, but not tested using BDD methods.
- Needs tested using BDD because of the nature of these methods. There is a potential that switching these to view components we could avoid having to test with BDD methods, but it is doubtful because of JavaScript interactions that need to take place.
- This is a series of modules and libraries to make a cleaner representation of the forms that are built for actually using the forms. So this instance will work with the logic provided form the JSON Data structures, parse it into manageable hashes, and use helpful classes to generate the HTML.
- Complete, tested by Unit tests.
- located in
app/lib/field_builder
- Somewhat complete potential refactors and changes should happen.
-
/items/digital_objects
shows the forms used for digital objects.- Shows Form
- New (Makes a new item or digital object)
- List Objects to allow for edit
- Allow for deleting objects
-
/items/metadata
shows the form used for metadata objects.- Shows Form
- New (Makes a new item or digital object)
- List Objects to allow for edit
- Allow for deleting objects
- Validator Module
- Complete for all features used in the form builders.
- This is completed for system IDNO management, may need more work in the future.
- IDNO is created using the record count, a padding size, and pattern replacement using substrings.
- Race Conditions could possibly occur, if there is a bug this is the bug I would expect.
- The Upload is able to process, but there is a bigger module in play with this. So while this small part of the process is done there are more that need to be added and modified before going into production. I would treat this as MVP and work on it after the beta release. Meaning that what is here is fine, but we should imitate chunking and abstract this to a AJAX upload so it doesn't block the form.
- This feature set is complete, but not added to the menu. It is able to be added and modified in it's own menu as well as under the forms in a much nicer way than it currently exists in MFCS. As an aside for this, the menu aspect needs to be added based on permissions.
- Metadata / Forms / Objects.
- These should only Show if the user has permissions to view, edit, modify, etc.
- Simplify the interface, then it makes the application easier to use.
- This needs done, we need to create a search module system that uses the JSONB functions and potentially ElasticSearch to create an index to pull from, however PGSearch may get us by.
- The watermarks is complete aside from the additions to the menu.
- The menu interface is incomplete, this is because the menu should be modified based on permissions.
- I would handle the generation of the menu as a Module/Presenter that generates the HTML and Links based on the users permission levels.
- Making a menu module would do a few things,
- this would make a way to test that the permission levels are what they say they are
- limits the number of links users have to look at which simplifies the application
- Make a hard coded object more maintainable.
- Background jobs are completed through the use of Redis and Sidekiq. While this adds to the total stack and size of the docker containers it adds a huge benefit to production by allowing us to run conversions as backgrounded tasks.
- Every copy of a media object is an associated database with a form, object, and has appropriate file information with it. This is so that the files are not just stored in the JSON of the item and have a way to be found, and eventually linked with any number of items.
-
The goal for this is to run a job that sets all the jobs in place for conversion of files. This way you can narrow down any failure points or errors using the sidekiq jobs interface to see failed jobs. As a side note you can copy that into an interface for all admins to see using an AJAX request or the documentation from sidekiq.
-
EX: If a user uploads 3 tiffs and an audio file. A job parser should run and create a background job for
- Working Files / Archive Files
- Conversions
- OCR
-
This would setup a job queue that would look like
- Working File Tif 1
- Working File Tif 2
- Working File Tif 3
- Working File Audio File
- Convert Tif 1
- Convert Tif 2
- Convert Tif 3
- OCR TIF 1
- OCR TIF 2
- OCR TIF 3
- Convert Audio
- Combine PDF
- Notify User (Conversion Complete) This can be done for each conversion job, or as a process set to send after the sequence of jobs are finished.
- This solves in the current version having to wait until 1:00am to see if a conversion is completed. It provides a better way to manage system resources without causing intentional delay. There could be problems associated with it such as incomplete jobs, a subsystem going down, race conditions, or un-synced source code however those risks are minimal and it would provide a better experience for the user.
- This is the file the user uploaded. Once uploaded it will be used once to create a working copy and will be stored as a preservation file only to be used if a working file doesn't exist.
- A direct copy of the archive file that is moved into a working copy directory to ensure the archive file is not touched again. The base file for all uploaded versions.
- The rest of these will be conversion types that are all classes to ensure that the modules can be re-used and are easily editable and will deal with possible conditions of the conversions and different options.
- Image
- Audio
- Video
- OCR
- OCR Library has 2 options, saving a PDF Copy of the OCR Document
- Returning Text to save in the database along with that media object.
- Currently, I think we should do both. Save a copy of the text in the media Object and
- This basically assigns a tag or search queue for finding a resource. These can be applied to users, items, and forms, but I think currently it only functions with forms in the form of the tag being applied to an item. There has to be a better way to get this relationship established and then query on it.
- Currently the notifications system in MFCS tells you when an automatic export is complete. I think I would expand on this to do in browser notifications for things when a User is logged in and also using the mailer functionality.
Documented and Built By WVU Libraries. If the content in this page is outdated please let us know.
Please Submit Github Issues for the following types of requests:
- Documentation Update
- Bug Fixes
- Feature Enhancement
- New Features