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 .contact import PhoneNumber, EmailAddress, MailingAddress
|
||||||
|
|
||||||
from .people import Person, PersonPhoneNumber, PersonEmailAddress, PersonMailingAddress
|
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 .stores import Store, StorePhoneNumber, StoreEmailAddress
|
||||||
from .customers import (Customer, CustomerPhoneNumber, CustomerEmailAddress, CustomerMailingAddress,
|
from .customers import (Customer, CustomerPhoneNumber, CustomerEmailAddress, CustomerMailingAddress,
|
||||||
CustomerGroup, CustomerGroupAssignment, CustomerPerson)
|
CustomerGroup, CustomerGroupAssignment, CustomerPerson)
|
||||||
|
|
|
@ -26,6 +26,8 @@ Data Models for Users & Permissions
|
||||||
|
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
|
||||||
import six
|
import six
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy import orm
|
from sqlalchemy import orm
|
||||||
|
@ -199,6 +201,10 @@ class User(Base):
|
||||||
session = orm.object_session(self)
|
session = orm.object_session(self)
|
||||||
return administrator_role(session) in self.roles
|
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(
|
User.person = orm.relationship(
|
||||||
Person,
|
Person,
|
||||||
|
@ -244,3 +250,35 @@ User.roles = association_proxy(
|
||||||
'_roles', 'role',
|
'_roles', 'role',
|
||||||
creator=lambda r: UserRole(role=r),
|
creator=lambda r: UserRole(role=r),
|
||||||
getset_factory=getset_factory)
|
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_CURRENT = 1
|
||||||
EMPLOYEE_STATUS_FORMER = 2
|
EMPLOYEE_STATUS_FORMER = 2
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue