Hi there
Bounty offered to write this plugin
I am working with an organisation to demonstrate how a forum can be used to create a community of practice using a form system. Their requirement was to identify a cloud based system that they can configure and use rather than have to undertake a systems integration project, the idea being that once they can demonstrate the effectiveness of such a community (or otherwise) the project can be extended to include deeper integration with their CRM.
I have the document below as a word doc and would be happy to have a skupe with anyone interested, I am looking to go down the test driven development route
In reviewing the various systems currently available to deliver this functionality NodeBB met (and exceeded) the key requirement except one : Bulk loading of members and association with groups.
The team wish to look to commission a plugin which would build upon the existing Write-API plugin to provide the functionality described in the use cases in the list below.
If you are interested then send me an email, [email protected] I have the spec below as a word / google doc if that helps and no dobut the spec needs a bit of refinement.
Functional requirement
To take as an input a csv / json file in a flat structure described in appendix 1 below. The flat file structure is designed to be easy for users to create from excel or similar with the potential to have multiple lines for each user rather than having a more nested structure. Increasingly it possible to convert CSV to json using tools such as http://www.convertcsv.com/csv-to-json.htm which are much more readable especially if there are no nested groups. The de-normalised file structure can have multiple lines for any given user, this is intentional and is intended to make it easy for uses to create add / delete lists using common tools such as excel. The design goal is to push the ETL complexity into the module were it could be handled against a set of simple business rules. This will drive adoption will reduce the number of add/ delete errors.
Requirement
Serial Use Case Notes
1 Add user
Processing
If there is no such user then providing the input data validates and is complete generate a 6 character password use write API and create a record email user via Node
Exception
If the user exists, ignore and go onto processing the group parameter if it exists or move to next record Takes more than 30 seconds to process a line β timeout error
Log entries
Write out a log status for each transaction
<timestamp>Info: User < username> added to system
<timestamp>Error: User <username> not added -insufficient data
<timestamp>Error: User <username> not added -non valid email
<timestamp>Error: User <username> not added timeout
2 Add Group to user
Processing
If the user does not exist then run use case add user above If the group exists and the user is not already in the group then add user to group
Exception
If the user is already in the group ignore write an error
If the group does not exist ignore write an error
Takes more than 30 seconds to process a line β timeout error
Log entries
Write out a log status for each transaction
<timestamp>Info: user <username> added to group <group>
<timestamp>Error: user <username> already in group <group>
<timestamp>Error: group <group> does not exist could not add user <username>
<timestamp>Error: group <group> user <username> - not added timeout
3 Remove Group access from user
Processing
If the group does not exist the raise an error
If the user is not in the group then raise an error Remove the user <username> from the group
Exception
If the user is not in the group ignore write an error
If the user is logged in then ignore and write an error
If the group does not exist ignore write an error
Takes more than 30 seconds to process a line β timeout error
Log entries
Write out a log status for each transaction
<timestamp>Info: user <username> removed from group <group>
<timestamp>Error: user <username> not in group <group> cannot remove
<timestamp>Error: group <group> does not exist could not remove user <username>
<timestamp>Error: cannot remove user <username> from groupβ timeout error
4 Suspend a user accounts and access
Processing
Suspend user <username> from accessing the system and all groups that require a login.
Exceptions
There is no such user - raise an error
Log entries
Write out a log status for each transaction
<timestamp>Info: user <username> suspended form all groups and system access
<timestamp>Error: There is no such user <username>
5 Processing record
This is a nice to have
Processing and MIS
Write to log file a Timestamp the start of processing
Keep a tally of
- Number of users added
- Number of group adds
- Number of group removes
- Number of suspends
- Total number of info records
- Total number of error records
Timestamp when processing ends
Pull out a list of groups and total number of users and total number of users / group If processing any one record takes more than 30 seconds then time out and pass to the next.
In addition to being able to handle the use cases above the plugin would also need to provide some sort of UI to provide:
- The ability to validate an data processing using a password or key
- The ability to load a data file
- The ability to download a processing log
Appendix 1
The file will be in CSV format (pipe separated) and to have the following structure
Field name |
M/O |
Validation rule |
USERNAME, |
M, |
can it process unicode |
EMAIL , |
M, |
needs to be avalid format |
GROUP, |
O, |
Needs to be valid group name on that board |
ACTION, |
O, |
A, R, GR - (add, remove, group remove) |
Example Data file and format
CSV file ( pipe delimited) Goal / test case
username|email|group|action
dmoore|[email protected]|QTLS|A
dmoore|[email protected]|SET|A
edna2|edna2@[email protected]|QTLS|
edna2|edna2@[email protected]||R
edna3|edna3@[email protected]||
and in JSON
[
{
"username":"dmoore",
"email":"[email protected]",
"group":"QTLS",
"action":"A"
},
{
"username":"dmoore",
"email":"[email protected]",
"group":"SET",
"action":"A"
},
{
"username":"edna2",
"email":"edna2@[email protected]",
"group":"QTLS",
"action":" "
},
{
"username":"edna2",
"email":"edna2@[email protected]",
"group":"",
"action":"remove"
},
{
"username":"edna3",
"email":"edna3@[email protected]",
"group":"",
"action":""
}
]