Advertisement
vsokoltsov

Untitled

Jan 7th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. class Company(db.Model):
  2. """ Company representation in the system """
  3.  
  4. __tablename__ = 'companies'
  5.  
  6. id = db.Column(db.Integer, primary_key=True)
  7. name = db.Column(db.String(), nullable=False, index=True)
  8. description = db.Column(db.Text())
  9. start_date = db.Column(db.Date(), index=True)
  10. city = db.Column(db.String())
  11. created_at = db.Column(db.DateTime(), default=datetime.datetime.now)
  12. updated_at = db.Column(db.DateTime(), onupdate=datetime.datetime.now)
  13.  
  14. employees = db.relationship('CompanyUser', backref=db.backref('companies', lazy=True))
  15.  
  16. class User(db.Model):
  17. """ User representation in the system """
  18.  
  19. __tablename__ = 'users'
  20.  
  21. id = db.Column(db.Integer, primary_key=True)
  22. email = db.Column(db.String(), unique=True, nullable=False)
  23. first_name = db.Column(db.String())
  24. last_name = db.Column(db.String())
  25. password_digest = db.Column(db.String(), nullable=False)
  26.  
  27. companies = db.relationship('CompanyUser', backref=db.backref('users', lazy=True))
  28.  
  29. def __init__(self, **kwargs):
  30. password = kwargs.pop('password', None)
  31. super(User, self).__init__(**kwargs)
  32. self.password_digest = self.set_password(password)
  33.  
  34. def set_password(self, password):
  35. """ Hash and store password """
  36.  
  37. return bcrypt.hashpw(
  38. password.encode(), bcrypt.gensalt()
  39. ).decode('utf8')
  40.  
  41. def authenticate(self, password):
  42. """ Authenticate user; Check if user's password match the given one """
  43.  
  44. return bcrypt.checkpw(password.encode(), self.password_digest.encode())
  45.  
  46.  
  47. class CompanyUser(db.Model):
  48. """ Association object class for company and user"""
  49.  
  50. __tablename__ = 'company_users'
  51.  
  52. company_id = db.Column(
  53. db.Integer, db.ForeignKey('companies.id'), primary_key=True, nullable=False
  54. )
  55. user_id = db.Column(
  56. db.Integer, db.ForeignKey('users.id'), primary_key=True, nullable=False
  57. )
  58. role = db.Column(db.Integer, index=True)
  59. created_at = db.Column(db.DateTime(), default=datetime.datetime.now)
  60. updated_at = db.Column(db.DateTime(), onupdate=datetime.datetime.now)
  61.  
  62. company = Company(**params)
  63. company_user = CompanyUser(
  64. role=self.DEFAULT_ROLE
  65. )
  66. company.employees.append(company_user)
  67. self.current_user.companies.append(company_user)
  68. db.session.add(company)
  69. db.session.commit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement