Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mover inserted_by e updated_by para o modelo Base #34

Open
felihenrique opened this issue May 22, 2017 · 14 comments
Open

Mover inserted_by e updated_by para o modelo Base #34

felihenrique opened this issue May 22, 2017 · 14 comments

Comments

@felihenrique
Copy link
Contributor

Essa é uma tarefa repetitiva e igual para todas as ocasiões (corrijam se eu estiver errado), então creio que seria melhor deixar no modelo Base.

@rodrigondec
Copy link
Member

rodrigondec commented May 22, 2017

Mas já está assim

class Base(db.Model):
    __abstract__ = True

    disabled = db.Column(db.Boolean, default=0)
    inserted_since = db.Column(db.DateTime, default=db.func.now())
    @declared_attr
    def inserted_by(cls):
        return db.Column(db.Integer, db.ForeignKey('user.id_user'))
    # inserted_by = db.Column(db.Integer, db.ForeignKey('user.id_user'))
    last_updated_since = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now())
    @declared_attr
    def last_updated_by(cls):
        return db.Column(db.Integer, db.ForeignKey('user.id_user'))
    # last_updated_by = db.Column(db.Integer, db.ForeignKey('user.id_user'))

class User(Base):
    id_user = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    email = db.Column(db.String(50), unique=True)
    sigaa_registration_number = db.Column(db.String(15), unique=True)
    sigaa_user_name = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(64))
    id_photo_file = db.Column(db.Integer, db.ForeignKey('file.id_file'))
    event_participations = db.relationship(
        'Event',
        secondary=event_participation,
        backref=db.backref('participating_users', lazy='dynamic')
    )
    user_interests = db.relationship(
        'Tag',
        secondary=user_interest,
        backref=db.backref('interested_users', lazy='dynamic')
    )

@felihenrique
Copy link
Contributor Author

Mas pq então os modelos recebem esses parâmetros?

@felihenrique
Copy link
Contributor Author

felihenrique commented May 22, 2017

Acho que me expressei errado, o que quis dizer é o preenchimento desses dados ficar no modelo base, pegando os dados de sessão e preenchendo.

@rodrigondec
Copy link
Member

rodrigondec commented May 23, 2017

Os modelos recebem esse parâmetro porque eles herdam da classe Base, e a classe Base é abstract. Então o que tem nela vira só um copy-paste pros outros models.

E o ideal é esse id_user ser pego a partir da sessão mesmo. E só precisaremos nos preocupar com o id_user mesmo.

Levando em consideração que os campos de data serão pegos a partir do tempo do banco de dados que for feita uma alteração, de acordo com o código:

inserted_since = db.Column(db.DateTime, default=db.func.now())
last_updated_since = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now())

Creio que esse onupdate=db.func.now() crie um trigger no banco ou algo assim.

@felihenrique
Copy link
Contributor Author

Mas então porque colocar nos parametros nas classes derivadas?

@rodrigondec
Copy link
Member

rodrigondec commented May 23, 2017

Mas ele não 'está' nas classes derivadas. As classes derivadas herdam esses parâmetros.

Não pode existir a persisência da classe Base no sistema. Então as classes derivadas herdam os atributos da classe Base.

@felihenrique
Copy link
Contributor Author

Mas poderia fazer algo parecido com o que fez com a data:

updated_by = db.Column(db.Integer, db.ForeignKey('user.id_user'), default=getUserID(), onupdate=getUserID())

@rodrigondec
Copy link
Member

rodrigondec commented May 23, 2017

Existe isso?

Não sabia, se tiver mesmo a gente utiliza.

@felihenrique
Copy link
Contributor Author

getUserID é uma função ficticia kkk seria o método que usariamos para pegar o id atual do usuário na sessão.

@rodrigondec
Copy link
Member

Saquei, o negócio é que não teremos sessão. O que teremos é token de permissão pra ter uma sessão no IntegraTI-Web. A gente sempre vai receber o id do usuário junto do json de informações da ação atual

@felihenrique
Copy link
Contributor Author

Mas o token funciona como se fosse a sessão, ele contém os dados de sessão do usuário, só que encriptados. Dá uma olhada nessa library para python:
http://pyjwt.readthedocs.io/en/latest/
E esse método ai funciona, pelo que testei aqui. Vou subir no branch evento_controllers para vc dar uma olhada.

@rodrigondec
Copy link
Member

Na reunião que ocorreu com Itamir, discutimos um pouco sobre isso e pensamos em utilizar Oauth É a mesma coisa do que esse dai ou se complementam? depois de uma olhada

@felihenrique
Copy link
Contributor Author

Oauth é mais complexo, e creio que não vale a pena para esse projeto já que muitas das features dele (como por ex. disponibilização de autenticação para terceiros) a gente não vai utilizar. Esse dai é bem mais simples.

@felihenrique
Copy link
Contributor Author

Dê uma olhada no link que te mandei.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants