Add schema/enum for recording user events
i.e. login and logout, to get a very basic idea of local node activity
This commit is contained in:
parent
2b851a9c8c
commit
7983e92764
40
rattail/db/alembic/versions/1242c7a0e24a_add_user_events.py
Normal file
40
rattail/db/alembic/versions/1242c7a0e24a_add_user_events.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""add user events
|
||||
|
||||
Revision ID: 1242c7a0e24a
|
||||
Revises: cc3de1ca0689
|
||||
Create Date: 2017-08-04 16:41:40.837455
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '1242c7a0e24a'
|
||||
down_revision = u'cc3de1ca0689'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import rattail.db.types
|
||||
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
||||
# user_event
|
||||
op.create_table('user_event',
|
||||
sa.Column('uuid', sa.String(length=32), nullable=False),
|
||||
sa.Column('user_uuid', sa.String(length=32), nullable=False),
|
||||
sa.Column('type_code', sa.Integer(), nullable=False),
|
||||
sa.Column('occurred', sa.DateTime(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['user_uuid'], [u'user.uuid'], name=u'user_x_role_fk_user'),
|
||||
sa.PrimaryKeyConstraint('uuid')
|
||||
)
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
# user_event
|
||||
op.drop_table('user_event')
|
|
@ -30,7 +30,7 @@ from .core import Base, ModelBase, uuid_column, getset_factory, GPCType, Setting
|
|||
from .contact import PhoneNumber, EmailAddress, MailingAddress
|
||||
|
||||
from .people import Person, PersonPhoneNumber, PersonEmailAddress, PersonMailingAddress
|
||||
from .users import Role, Permission, User, UserRole
|
||||
from .users import Role, Permission, User, UserRole, UserEvent
|
||||
from .stores import Store, StorePhoneNumber, StoreEmailAddress
|
||||
from .customers import (Customer, CustomerPhoneNumber, CustomerEmailAddress, CustomerMailingAddress,
|
||||
CustomerGroup, CustomerGroupAssignment, CustomerPerson)
|
||||
|
|
|
@ -26,6 +26,8 @@ Data Models for Users & Permissions
|
|||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import datetime
|
||||
|
||||
import six
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
|
@ -199,6 +201,10 @@ class User(Base):
|
|||
session = orm.object_session(self)
|
||||
return administrator_role(session) in self.roles
|
||||
|
||||
def record_event(self, type_code, **kwargs):
|
||||
kwargs['type_code'] = type_code
|
||||
self.events.append(UserEvent(**kwargs))
|
||||
|
||||
|
||||
User.person = orm.relationship(
|
||||
Person,
|
||||
|
@ -244,3 +250,35 @@ User.roles = association_proxy(
|
|||
'_roles', 'role',
|
||||
creator=lambda r: UserRole(role=r),
|
||||
getset_factory=getset_factory)
|
||||
|
||||
|
||||
class UserEvent(Base):
|
||||
"""
|
||||
Represents an event associated with a user.
|
||||
"""
|
||||
__tablename__ = 'user_event'
|
||||
__table_args__ = (
|
||||
sa.ForeignKeyConstraint(['user_uuid'], ['user.uuid'], name='user_x_role_fk_user'),
|
||||
)
|
||||
|
||||
uuid = uuid_column()
|
||||
|
||||
user_uuid = sa.Column(sa.String(length=32), nullable=False)
|
||||
user = orm.relationship(
|
||||
User,
|
||||
doc="""
|
||||
Reference to the user whose event this is.
|
||||
""",
|
||||
backref=orm.backref(
|
||||
'events',
|
||||
doc="""
|
||||
Sequence of events for the user.
|
||||
"""))
|
||||
|
||||
type_code = sa.Column(sa.Integer(), nullable=False, doc="""
|
||||
Type code for the event.
|
||||
""")
|
||||
|
||||
occurred = sa.Column(sa.DateTime(), nullable=True, default=datetime.datetime.utcnow, doc="""
|
||||
Timestamp at which the event occurred.
|
||||
""")
|
||||
|
|
|
@ -364,6 +364,15 @@ UNIT_OF_MEASURE = {
|
|||
}
|
||||
|
||||
|
||||
USER_EVENT_LOGIN = 1
|
||||
USER_EVENT_LOGOUT = 2
|
||||
|
||||
USER_EVENT = {
|
||||
'USER_EVENT_LOGIN' : "login",
|
||||
'USER_EVENT_LOGOUT' : "logout",
|
||||
}
|
||||
|
||||
|
||||
EMPLOYEE_STATUS_CURRENT = 1
|
||||
EMPLOYEE_STATUS_FORMER = 2
|
||||
|
||||
|
|
Loading…
Reference in a new issue