This is the repository responsible for GuruHub's apps.
-
Backend — GuruHub's application backend.
To work properly, fill in the
.env
file. Use the.env.example
file as an example. -
Frontend — GuruHub's application frontend.
To work properly, fill in the
.env
file. Use the.env.example
file as an example. -
Shared — GuruHub's application common modules for reuse.
- NodeJS (16.x.x);
- NPM (8.x.x);
- PostgreSQL (14.2)
- run
npx simple-git-hooks
at the root of the project, before the start (it will set the pre-commit hook for any commits).
npm run install:all
at the root- Fill ENVs
npx simple-git-hooks
at the rootcd frontend && npm run start
thencd backend && npm run start:dev
- Enjoy <3
erDiagram
users {
int id PK
dateTime created_at
dateTime updated_at
varchar email
text password_hash
text password_salt
int group_id FK
}
groups {
int id PK
dateTime created_at
dateTime updated_at
varchar name
varchar key
}
users_to_groups }|--|| groups : group_id
users_to_groups }|--|| users : user_id
users_to_groups {
int id PK
dateTime created_at
dateTime updated_at
int group_id FK "unique (group_id user_id)"
int user_id FK "unique (group_id user_id)"
}
permissions {
int id PK
dateTime created_at
dateTime updated_at
varchar name
varchar key
}
groups_to_permissions }|--|| permissions : permission_id
groups_to_permissions }|--|| groups : group_id
groups_to_permissions {
int id PK
dateTime created_at
dateTime updated_at
int permission_id FK "unique (permission_id group_id)"
int group_id FK "unique (permission_id group_id)"
}
user_details ||--|| users : user_id
user_details ||--|| files : avatar_file_id
user_details {
int id PK
dateTime created_at
dateTime updated_at
int user_id FK
varchar first_name
varchar last_name
varchar gender
int avatar_file_id FK
date date_of_birth
float money_balance
}
courses ||--|| vendors : vendor_id
courses }|--|| course_categories : course_category_id
courses {
int id PK
dateTime created_at
dateTime updated_at
varchar title
text description
varchar url
int vendor_id FK
int course_category_id FK
}
course_modules }|--|| courses : course_id
course_modules {
int id PK
dateTime created_at
dateTime updated_at
int course_id FK
int module_index
varchar title
text description
}
course_categories {
int id PK
dateTime created_at
dateTime updated_at
varchar name
varchar key
}
vendors {
int id PK
dateTime created_at
dateTime updated_at
varchar name
varchar key
}
mentees_to_mentors }|--|| courses : course_id
mentees_to_mentors }|--|| users : mentor_id
mentees_to_mentors }|--|| users : mentee_id
mentees_to_mentors {
int id PK
dateTime created_at
dateTime updated_at
int course_id FK
int mentor_id FK
int mentee_id FK
enum status
}
tasks }|--|| mentees_to_mentors : mentees_to_mentors_id
tasks }|--|| course_modules : module_id
tasks {
int id PK
dateTime created_at
dateTime updated_at
int mentees_to_mentors_id FK
int module_id FK
enum status
}
interviews }|--o| users : interviewer_user_id
interviews }|--|| users : interviewee_user_id
interviews }|--|| course_categories : course_categories_id
interviews {
int id PK
dateTime created_at
dateTime updated_at
dateTime interview_date
int interviewer_user_id FK
int interviewee_user_id FK
int category_id FK
enum status
}
interview_notes }|--|| interviews : interview_id
interview_notes }|--|| users : author_id
interview_notes {
int id PK
dateTime created_at
dateTime updated_at
int interview_id FK
int author_id FK
text note
}
files ||--|| user_details : avatar_url
files {
int id PK
dateTime created_at
dateTime updated_at
varchar url
varchar content_type
}
courses_to_mentors }|--|| courses : course_id
courses_to_mentors }|--|| users : user_id
courses_to_mentors {
int id PK
dateTime created_at
dateTime updated_at
int students_count
int user_id FK
int course_id FK
}
chat_messages }|--|| users : sender_id
chat_messages }|--|| users : receiver_id
chat_messages {
int id PK
dateTime created_at
dateTime updated_at
int sender_id FK
int receiver_id FK
text message
uuid chat_id
}
task_notes }|--|| tasks : task_id
task_notes }|--|| users : author_id
task_notes {
int id PK
dateTime created_at
dateTime updated_at
int task_id FK
int author_id FK
enum status
}
course_categories_prices ||--|| course_categories : category_id
course_categories_prices {
int id PK
dateTime created_at
dateTime updated_at
int category_id FK
float price
}
transactions }|--|| users : sender_id
transactions }|--|| users : receiver_id
transactions {
int id PK
dateTime created_at
dateTime updated_at
int sender_id FK
int receiver_id FK
float amount
enum status
}
- React – a frontend library.
- Redux + Redux Toolkit – a state manager.
- simple-git-hooks — a tool that lets you easily manage git hooks.
- lint-staged — run linters on git staged files.
- editorconfig — helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
- prettier — an opinionated code formatter.
- ls-lint — file and directory name linter.
- eslint – find problems in your JS code
- stylelint – Find and fix problems in your CSS code
production
- production source code.development
- staging source code.
<project-prefix>-<ticket-number>: <ticket-title>
blog-5: Add form component
<type>/<project-prefix><ticket-number>-<short-desc>
- task
- fix
task/design5-add-signin-page
task/blog12-add-filters
fix/design16-fix-signup-validation
<project-prefix>-<ticket-number>: <modifier> <desc>
+
(add)*
(edit)-
(remove)
blog-5: + form component
design-12: * filter markup
blog-16: - require prop for nickname field
- Bucket for files should have public access policy