Comments (10)
Weren't we planning on using the user_name (URL friendly) as the root url path for all beta / small projects? e.g. zooniverse.org/my_zoo_user_name/project_name/
As you said above the "sponsored" projects would look like zooniverse.org/project_name/.+
from panoptes.
I think super-explicit API endpoints and slightly looser, human-friendly front end URLs is the way to go. /:project_name
aliases (redirects?) sound good to me too.
What're collections?
What's a user doing looking for a specific workflow?
Subject sets won't be tied to a project. Neither will workflows, for that matter.
from panoptes.
Wasn't the idea for workflows being generic in the sense of project creation but linked to a specific project definition?
from panoptes.
Collections are subject collections (like favorites) a user can make. Right now Workflows and SubjectSets assume a link to a specific project, to reduce the number of joins in the database. I'd assume if you wanted to import them into a second project, we could duplicate their records in the db?
from panoptes.
perhaps we need a workflow and project_workflow join table? Save the data duplication but allow the links to happen? Either that or the workflows are defined in code?
from panoptes.
I think the goal is to have people provide big open data sets (e.g. "SDSS 2013 images") that people (e.g. students) can build projects around.
Workflows should be generic so people can build two projects with different data sets using the same tasks (e.g. Galaxy Zoo 1 and Galaxy Zoo 2 or something). Might be rare, but I think it should be possible.
from panoptes.
I think workflow sharing is something that's easy to make happen so we should do it, but I'm for copying existing "template" workflows, so someone changing an upstream workflow doesn't change the one you're using on your project.
For instance in the GZ1/GZ2 senario. I don't think it'd good for the GZ1 owner to be able to remove a "Is there a merger question?" from their project and have it also disappear from the GZ2 project without explicit user action making that happen.
from panoptes.
good point. We need to lock the workflow to the point of project workflow selection.
from panoptes.
Hi all. I merged in my routes pull request as a starting point. Let's keep talking about what what exactly we want them to look like. As as now here's the output for rake routes | grep api
api_me GET /api/me(.:format) api/v1/users#show
api_user_collections GET /api/users/:user_id/collections(.:format) api/v1/collections#index
POST /api/users/:user_id/collections(.:format) api/v1/collections#create
api_user_collection GET /api/users/:user_id/collections/:id(.:format) api/v1/collections#show
PATCH /api/users/:user_id/collections/:id(.:format) api/v1/collections#update
PUT /api/users/:user_id/collections/:id(.:format) api/v1/collections#update
DELETE /api/users/:user_id/collections/:id(.:format) api/v1/collections#destroy
api_user_project_classifications GET /api/users/:user_id/projects/:project_id/classifications(.:format) api/v1/classifications#index
POST /api/users/:user_id/projects/:project_id/classifications(.:format) api/v1/classifications#create
api_user_project_classification GET /api/users/:user_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#show
PATCH /api/users/:user_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#update
PUT /api/users/:user_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#update
DELETE /api/users/:user_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#destroy
api_user_project_workflows GET /api/users/:user_id/projects/:project_id/workflows(.:format) api/v1/workflows#index
POST /api/users/:user_id/projects/:project_id/workflows(.:format) api/v1/workflows#create
api_user_project_workflow GET /api/users/:user_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#show
PATCH /api/users/:user_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#update
PUT /api/users/:user_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#update
DELETE /api/users/:user_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#destroy
api_user_project_subject_set_subjects GET /api/users/:user_id/projects/:project_id/subject_sets/:subject_set_id/subjects(.:format) api/v1/subjects#index
POST /api/users/:user_id/projects/:project_id/subject_sets/:subject_set_id/subjects(.:format) api/v1/subjects#create
api_user_project_subject_set_subject GET /api/users/:user_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#show
PATCH /api/users/:user_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#update
PUT /api/users/:user_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#update
DELETE /api/users/:user_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#destroy
api_user_project_subject_sets GET /api/users/:user_id/projects/:project_id/subject_sets(.:format) api/v1/subject_sets#index
POST /api/users/:user_id/projects/:project_id/subject_sets(.:format) api/v1/subject_sets#create
api_user_project_subject_set GET /api/users/:user_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#show
PATCH /api/users/:user_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#update
PUT /api/users/:user_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#update
DELETE /api/users/:user_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#destroy
api_user_projects GET /api/users/:user_id/projects(.:format) api/v1/projects#index
POST /api/users/:user_id/projects(.:format) api/v1/projects#create
api_user_project GET /api/users/:user_id/projects/:id(.:format) api/v1/projects#show
PATCH /api/users/:user_id/projects/:id(.:format) api/v1/projects#update
PUT /api/users/:user_id/projects/:id(.:format) api/v1/projects#update
DELETE /api/users/:user_id/projects/:id(.:format) api/v1/projects#destroy
api_users GET /api/users(.:format) api/v1/users#index
POST /api/users(.:format) api/v1/users#create
api_user GET /api/users/:id(.:format) api/v1/users#show
PATCH /api/users/:id(.:format) api/v1/users#update
PUT /api/users/:id(.:format) api/v1/users#update
DELETE /api/users/:id(.:format) api/v1/users#destroy
api_group_collections GET /api/groups/:group_id/collections(.:format) api/v1/collections#index
POST /api/groups/:group_id/collections(.:format) api/v1/collections#create
api_group_collection GET /api/groups/:group_id/collections/:id(.:format) api/v1/collections#show
PATCH /api/groups/:group_id/collections/:id(.:format) api/v1/collections#update
PUT /api/groups/:group_id/collections/:id(.:format) api/v1/collections#update
DELETE /api/groups/:group_id/collections/:id(.:format) api/v1/collections#destroy
api_group_project_classifications GET /api/groups/:group_id/projects/:project_id/classifications(.:format) api/v1/classifications#index
POST /api/groups/:group_id/projects/:project_id/classifications(.:format) api/v1/classifications#create
api_group_project_classification GET /api/groups/:group_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#show
PATCH /api/groups/:group_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#update
PUT /api/groups/:group_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#update
DELETE /api/groups/:group_id/projects/:project_id/classifications/:id(.:format) api/v1/classifications#destroy
api_group_project_workflows GET /api/groups/:group_id/projects/:project_id/workflows(.:format) api/v1/workflows#index
POST /api/groups/:group_id/projects/:project_id/workflows(.:format) api/v1/workflows#create
api_group_project_workflow GET /api/groups/:group_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#show
PATCH /api/groups/:group_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#update
PUT /api/groups/:group_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#update
DELETE /api/groups/:group_id/projects/:project_id/workflows/:id(.:format) api/v1/workflows#destroy
api_group_project_subject_set_subjects GET /api/groups/:group_id/projects/:project_id/subject_sets/:subject_set_id/subjects(.:format) api/v1/subjects#index
POST /api/groups/:group_id/projects/:project_id/subject_sets/:subject_set_id/subjects(.:format) api/v1/subjects#create
api_group_project_subject_set_subject GET /api/groups/:group_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#show
PATCH /api/groups/:group_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#update
PUT /api/groups/:group_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#update
DELETE /api/groups/:group_id/projects/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#destroy
api_group_project_subject_sets GET /api/groups/:group_id/projects/:project_id/subject_sets(.:format) api/v1/subject_sets#index
POST /api/groups/:group_id/projects/:project_id/subject_sets(.:format) api/v1/subject_sets#create
api_group_project_subject_set GET /api/groups/:group_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#show
PATCH /api/groups/:group_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#update
PUT /api/groups/:group_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#update
DELETE /api/groups/:group_id/projects/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#destroy
api_group_projects GET /api/groups/:group_id/projects(.:format) api/v1/projects#index
POST /api/groups/:group_id/projects(.:format) api/v1/projects#create
api_group_project GET /api/groups/:group_id/projects/:id(.:format) api/v1/projects#show
PATCH /api/groups/:group_id/projects/:id(.:format) api/v1/projects#update
PUT /api/groups/:group_id/projects/:id(.:format) api/v1/projects#update
DELETE /api/groups/:group_id/projects/:id(.:format) api/v1/projects#destroy
api_groups GET /api/groups(.:format) api/v1/groups#index
POST /api/groups(.:format) api/v1/groups#create
api_group GET /api/groups/:id(.:format) api/v1/groups#show
PATCH /api/groups/:id(.:format) api/v1/groups#update
PUT /api/groups/:id(.:format) api/v1/groups#update
DELETE /api/groups/:id(.:format) api/v1/groups#destroy
api_collection_subjects GET /api/collections/:ownername/:collection_id/subjects(.:format) api/v1/subjects#index
POST /api/collections/:ownername/:collection_id/subjects(.:format) api/v1/subjects#create
api_collection_subject GET /api/collections/:ownername/:collection_id/subjects/:id(.:format) api/v1/subjects#show
PATCH /api/collections/:ownername/:collection_id/subjects/:id(.:format) api/v1/subjects#update
PUT /api/collections/:ownername/:collection_id/subjects/:id(.:format) api/v1/subjects#update
DELETE /api/collections/:ownername/:collection_id/subjects/:id(.:format) api/v1/subjects#destroy
api_collections GET /api/collections/:ownername(.:format) api/v1/collections#index
POST /api/collections/:ownername(.:format) api/v1/collections#create
api_collection GET /api/collections/:ownername/:id(.:format) api/v1/collections#show
PATCH /api/collections/:ownername/:id(.:format) api/v1/collections#update
PUT /api/collections/:ownername/:id(.:format) api/v1/collections#update
DELETE /api/collections/:ownername/:id(.:format) api/v1/collections#destroy
api_subjects GET /api/subjects(.:format) api/v1/subjects#index
POST /api/subjects(.:format) api/v1/subjects#create
api_subject GET /api/subjects/:id(.:format) api/v1/subjects#show
PATCH /api/subjects/:id(.:format) api/v1/subjects#update
PUT /api/subjects/:id(.:format) api/v1/subjects#update
DELETE /api/subjects/:id(.:format) api/v1/subjects#destroy
api_project_classifications GET /api/projects/:ownername/:project_id/classifications(.:format) api/v1/classifications#index
POST /api/projects/:ownername/:project_id/classifications(.:format) api/v1/classifications#create
api_project_classification GET /api/projects/:ownername/:project_id/classifications/:id(.:format) api/v1/classifications#show
PATCH /api/projects/:ownername/:project_id/classifications/:id(.:format) api/v1/classifications#update
PUT /api/projects/:ownername/:project_id/classifications/:id(.:format) api/v1/classifications#update
DELETE /api/projects/:ownername/:project_id/classifications/:id(.:format) api/v1/classifications#destroy
api_project_workflows GET /api/projects/:ownername/:project_id/workflows(.:format) api/v1/workflows#index
POST /api/projects/:ownername/:project_id/workflows(.:format) api/v1/workflows#create
api_project_workflow GET /api/projects/:ownername/:project_id/workflows/:id(.:format) api/v1/workflows#show
PATCH /api/projects/:ownername/:project_id/workflows/:id(.:format) api/v1/workflows#update
PUT /api/projects/:ownername/:project_id/workflows/:id(.:format) api/v1/workflows#update
DELETE /api/projects/:ownername/:project_id/workflows/:id(.:format) api/v1/workflows#destroy
api_project_subject_set_subjects GET /api/projects/:ownername/:project_id/subject_sets/:subject_set_id/subjects(.:format) api/v1/subjects#index
POST /api/projects/:ownername/:project_id/subject_sets/:subject_set_id/subjects(.:format) api/v1/subjects#create
api_project_subject_set_subject GET /api/projects/:ownername/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#show
PATCH /api/projects/:ownername/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#update
PUT /api/projects/:ownername/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#update
DELETE /api/projects/:ownername/:project_id/subject_sets/:subject_set_id/subjects/:id(.:format) api/v1/subjects#destroy
api_project_subject_sets GET /api/projects/:ownername/:project_id/subject_sets(.:format) api/v1/subject_sets#index
POST /api/projects/:ownername/:project_id/subject_sets(.:format) api/v1/subject_sets#create
api_project_subject_set GET /api/projects/:ownername/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#show
PATCH /api/projects/:ownername/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#update
PUT /api/projects/:ownername/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#update
DELETE /api/projects/:ownername/:project_id/subject_sets/:id(.:format) api/v1/subject_sets#destroy
api_projects GET /api/projects/:ownername(.:format) api/v1/projects#index
POST /api/projects/:ownername(.:format) api/v1/projects#create
api_project GET /api/projects/:ownername/:id(.:format) api/v1/projects#show
PATCH /api/projects/:ownername/:id(.:format) api/v1/projects#update
PUT /api/projects/:ownername/:id(.:format) api/v1/projects#update
DELETE /api/projects/:ownername/:id(.:format) api/v1/projects#destroy
from panoptes.
I think we're all settled. This is the final form for the routes:
api_me GET /api/me api/v1/users#me
api_memberships GET /api/memberships api/v1/memberships#index
POST /api/memberships api/v1/memberships#create
api_membership GET /api/memberships/:id api/v1/memberships#show
PATCH /api/memberships/:id api/v1/memberships#update
PUT /api/memberships/:id api/v1/memberships#update
DELETE /api/memberships/:id api/v1/memberships#destroy
api_users GET /api/users api/v1/users#index
POST /api/users api/v1/users#create
api_user GET /api/users/:id api/v1/users#show
PATCH /api/users/:id api/v1/users#update
PUT /api/users/:id api/v1/users#update
DELETE /api/users/:id api/v1/users#destroy
api_groups GET /api/groups api/v1/groups#index
POST /api/groups api/v1/groups#create
api_group GET /api/groups/:id api/v1/groups#show
PATCH /api/groups/:id api/v1/groups#update
PUT /api/groups/:id api/v1/groups#update
DELETE /api/groups/:id api/v1/groups#destroy
api_collections GET /api/collections api/v1/collections#index
POST /api/collections api/v1/collections#create
api_collection GET /api/collections/:id api/v1/collections#show
PATCH /api/collections/:id api/v1/collections#update
PUT /api/collections/:id api/v1/collections#update
DELETE /api/collections/:id api/v1/collections#destroy
api_subjects GET /api/subjects api/v1/subjects#index
POST /api/subjects api/v1/subjects#create
api_subject GET /api/subjects/:id api/v1/subjects#show
PATCH /api/subjects/:id api/v1/subjects#update
PUT /api/subjects/:id api/v1/subjects#update
DELETE /api/subjects/:id api/v1/subjects#destroy
api_projects GET /api/projects api/v1/projects#index
POST /api/projects api/v1/projects#create
api_project GET /api/projects/:id api/v1/projects#show
PATCH /api/projects/:id api/v1/projects#update
PUT /api/projects/:id api/v1/projects#update
DELETE /api/projects/:id api/v1/projects#destroy
api_classifications GET /api/classifications api/v1/classifications#index
POST /api/classifications api/v1/classifications#create
api_classification GET /api/classifications/:id api/v1/classifications#show
PATCH /api/classifications/:id api/v1/classifications#update
PUT /api/classifications/:id api/v1/classifications#update
DELETE /api/classifications/:id api/v1/classifications#destroy
api_workflows GET /api/workflows api/v1/workflows#index
POST /api/workflows api/v1/workflows#create
api_workflow GET /api/workflows/:id api/v1/workflows#show
PATCH /api/workflows/:id api/v1/workflows#update
PUT /api/workflows/:id api/v1/workflows#update
DELETE /api/workflows/:id api/v1/workflows#destroy
api_subject_sets GET /api/subject_sets api/v1/subject_sets#index
POST /api/subject_sets api/v1/subject_sets#create
api_subject_set GET /api/subject_sets/:id api/v1/subject_sets#show
PATCH /api/subject_sets/:id api/v1/subject_sets#update
PUT /api/subject_sets/:id api/v1/subject_sets#update
DELETE /api/subject_sets/:id api/v1/subject_sets#destroy
from panoptes.
Related Issues (20)
- Allow admins to update user project preferences HOT 1
- Add avatar_src to the Panoptes JWT HOT 4
- Add "training" designation to workflows that should not keep projects active HOT 1
- API always startes at Page 1 when asking for subjects HOT 1
- Field guide's attached images not included in project copy HOT 1
- Owner/collab read permissions for Project Preferences HOT 2
- Deleting a subject set removes subjects that are still members of other sets HOT 5
- Talk Users are not created with project copy HOT 1
- Add favorite status to recents response
- Request user_groups not linked to individual users HOT 1
- rubygems-update requires ruby 3, breaking docker image creation
- subject_set_id filter doesn't retrieve all the subjects for a subject set HOT 7
- Reset email validity on change of email address HOT 1
- Able to add soft-deleted subjects to subject set HOT 2
- Living Sailor uses 2MB subject images HOT 6
- Should Workflow Version also track changes to Steps? HOT 1
- Check for unwanted subject deletion via set_member_subjects or subjects controllers HOT 2
- Email notification for email address change should be sent to old address HOT 4
- A copied workflow with survey task does not show images linked to survey task HOT 5
- Change automatic email notifications for project status changes HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from panoptes.