Giter Club home page Giter Club logo

bricoll's Introduction

CoderAbhi.0713

Hi πŸ‘‹, I am SOHAIB

sohaib manah skills

  • I love what I do, and I do what I love

  • πŸ’¬ I am looking for open-source projects to contribute in

  • πŸ’» I run Linux and I love open-source. I don't use Arch btw, but I use Nano because I don't remember how to exit Vim, sorry Vscode you're not my favorite

Here is my portfolio

https://sohaibmanah.netlify.app/

Hire me

https://www.fiverr.com/users/sohaibesohaib/
https://www.upwork.com/freelancers/~016a250ea317ab3bbf

fire: My Stats :


Β sohaibMan

sohaib manah

Β  Views and Followers πŸ‘€

GitHub Badge

bricoll's People

Contributors

dependabot[bot] avatar imgbot[bot] avatar sohaibman avatar zenaguianas avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

zenaguianas

bricoll's Issues

update the er diagram

feel free to add attributes u added on users to the data model diagram (/diagrames)

User Management (Login, Registration)

User Management

Join as a client or freelancer

πŸ“Œ Target

In the registration operation, the user can make a registration and choose the profile type either as freelancer or as client, the first one (freelancer) if he is looking for work, and client if he want to make a hiring for a project, in for each profile type the registration will be passing to multi-steps.

Step 1: Sign up using the email address, or OAuth API (Google, Facebook, Apple) Account
Step 2: Choosing the profile type
Step 3: Adding the personal information
Step 4: Verify your email to proceed
Step 5: Become a freelancer or client on Upwork
Step 6: Login as freelancer or as client on Upwork

πŸ’‘ Rules

-> The user choose the profile type then making a registration either with OAuth or manually.
-> The user adds his personal information (firstName, lastName, password, location)
-> Inserting some information related to the work we do (A photo of himself, his title, his overview, his Work history, At least one skill up to 15 skills)
-> The user highlights the educational information
-> Highlights the past work experience
-> Adding the language proficiency
-> Set his hourly rate
-> Add the contact details

βœ… TODOS

  • Handling the signup operation for user, by implementing mutation function signup()
  • Handling the login operation for user, by implementing mutation function login()
  • Handling the profile editing operation for user, by implementing mutation function updateProfile()
  • Handling the password updating operation for user, by implementing mutation function updatePassword()
  • Handling the profile deleting operation for user, by implementing mutation function deleteProfile()
  • Implementing query function getUser()
  • Implementing query function logout()
  • Implementing a function to generate the token using JWT (JSON Web Tokens) generateToken()
  • Implementing a function to send the token sendingToken()
  • Handling the forget password operation, by implementing mutation function forgetPassword()
  • Handling the reset password operation, by implementing mutation function resetPassword()

@sohaibMan what do you think about these key features ?

Payment Transaction (deposit)

  • When the client and freelancer finishs the discussing about the project, the client must pay the budget of the project depends on the type of payment, hourly or fixed-price but this transaction made after the client review the project.

  • This transaction pass through some steps:

  1. Select How You Get Paid
    -> You can withdraw directly to your bank account, or third-party payment like paypal, payonner ...
  2. Set Up a Payment Method
  3. Withdraw Your Earnings Manually
  4. Editing Payment Information

Jobs Route

Jobs Resouce:

In this resource, the client can crud his jobs and the freelancer can see published Jobs and react to them by love or dislike

In this section I got inspired by the up work docs about how to post jobs on up work how-to-post-job-on-up work
They have divided this resource to 6 steps

Step 1: Job post title
Step 2: Project skills
Step 3: Project scope
Step 4: Project budget
Step 5: Job post review
Step 6: Optional fine-tuning

For simplicity reasons I'll remove some complex functionalities and the reduce the number of steps to be 4 steps:

  1. Job title and job category
  2. Project skills (Will be an Array of skills)
  3. Project scope (Project size, estimated period, level of experience)
  4. Project Budget that will be fixed for the project without any milestones (price in Us dollars without any taxes, but with -10% of Bricoll fees) btw we will charge the freelancer another 10%

Rules: :
the client can create an unlimited number of jobs , and update all fields about the job without Affecting any existing offers ... (to be desccused )
the client can add attachments to his project that can be type of IMAGE | VIDEO | DOCUMENT
with other contraint , and we will use azure blob storage to uload them from the client browser without passing them to the server , and we will store just the url in the database and the type

  • add mutation functions to create, and update and delete a Job
  • add a resolver that get all the jobs (random) (we may write an algo that recommend jobs based on skills ...)
  • add activity info

example :
Activity on this job
Interviewing: 0
Invites sent: 0
Unanswered invites: 0

@ZenaguiAnas do You agree about this ?

chat app

we will need a real-time chat app (back end for now ), where the client and the freelancer can talk about the contract, would u do it after the implementation of the WebSocket connection

Secure Our Graph

  • auth (authentication, authorization)
  • limit query depth (4)
  • rate limiting 1k requests per minute

Terms of the contract

After the client stage the proposal to the chat session if he agrees with the freelancer they both should sign a contract with terms

rules::
the contract should have in it: the price, the time to deliver the project, a list of terms, project expectations
the contract is created by the client only
the contract is not active until both the freelancer and client sign It
the freelancer can create as many as he wants contracts per the same project
the freelancer and the client can sign more than one contract per the same project

Optimisation

@ZenaguiAnas I have a function getUserById to send emails to users which verbose (too many database read) I wanna optimise it but I found that you store the user with his email , here is the code below , I was wondering is it possible to add and id key so I can optimise my function

 const cacheResults = await redis.get(credentials.email);
          if(cacheResults){
            user = JSON.parse(cacheResults);

            // console.log("queried data from Redis Database ...",user)
            // console.log("verfication",await verifyUserData(user, credentials.password))

            return await verifyUserData(user, credentials.password);
          }
          // console.log("cache miss ...")
          user = await db.collection("users").findOne({ email: credentials.email });

          // console.log("queried data from MongoDB ...")

          // Caching the da
          // ta via Redis
          await redis.set(credentials.email, JSON.stringify(user))

Proposal Route

To Submit a proposal you must select a project by id (reference) and then fill in :

public in the schema:

project_id: reference that project collection
Additional details =>Cover Letter, Attachments (images +video +files ...)
Terms: price (Total amount) + duration (in days)

private properties

freelancer_id
Status :Enum("declined","canceled","approved","in_progress");

Rules :

  1. A project has many proposals and proposal belongs to one project
  2. Proposals will be a separated collection and it will have project_id reference to the project collection
  3. The client has the right to accept or decline a proposal and the freelancer can also cancel a proposed (we just change the status of the proposal)
  4. The proposals aren't deleted, but they change their status
  5. All the fields will be snake_case
  6. The freelance should approve that the price he provided will be reduced by 20% (Total amount = Total amount - Total amount * 0.2)
  7. The default status value will be in_progress
  8. The freelancer has the right to change the terms of the proposal
  9. The client should view the last version of the proposal
  10. If the client approves the proposal, a chat session the diocese more details
  11. After the chat if the client and the freelancer accept the terms they talked about the client should pay and the money will be on hold
  12. recive the notifaction( for the client on project proposal , for the freelancer on status change )

TODOS:

  • add proposal schema
  • add resolvers functions (submit proposal) (freelancer)
  • add resolvers functions (withdraw proposal) (freelancer)
  • add resolvers functions (edit proposal(change terms)) (freelancer)
  • add resolvers functions ( get proposals) (freelancer,client) by freelancer_id ,by client id respectivlty
  • add resolvers functions ( accept proposal) (client)
  • add resolvers functions ( decline proposal) (client)
  • add new resource ( join chat) (client,freelancer)
  • add resolvers functions ( accept terms) (freelancer,client)
  • add subscription for proposal notifaction

revalidate the cache after the user complete his profile

@ZenaguiAnas, after I complete the profile the Redis database still has this still info that I haven't completed my profile, you should revalidate the cache (sync the cache with the database,
and also the same notice about those routes :

/api/auth/emailVerfication
/api/auth/resetPassword
.... and vice versa you got my idea, isn't you?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.