Survey handler module

This commit is contained in:
Ben 2020-04-02 23:07:08 +01:00
parent 79a5c43a66
commit fed5cf01ec
4 changed files with 49 additions and 1 deletions

View File

@ -932,6 +932,7 @@ CREATE TABLE penguin_igloo_room (
music SMALLINT NOT NULL DEFAULT 0, music SMALLINT NOT NULL DEFAULT 0,
location INT NOT NULL, location INT NOT NULL,
locked BOOLEAN NOT NULL DEFAULT TRUE, locked BOOLEAN NOT NULL DEFAULT TRUE,
competition BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (id), PRIMARY KEY (id),
CONSTRAINT igloo_room_ibfk_1 FOREIGN KEY (penguin_id) REFERENCES penguin (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT igloo_room_ibfk_1 FOREIGN KEY (penguin_id) REFERENCES penguin (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT igloo_room_ibfk_2 FOREIGN KEY (type) REFERENCES igloo (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT igloo_room_ibfk_2 FOREIGN KEY (type) REFERENCES igloo (id) ON DELETE CASCADE ON UPDATE CASCADE,
@ -949,6 +950,7 @@ COMMENT ON COLUMN penguin_igloo_room.type IS 'Igloo type ID';
COMMENT ON COLUMN penguin_igloo_room.flooring IS 'Igloo flooring ID'; COMMENT ON COLUMN penguin_igloo_room.flooring IS 'Igloo flooring ID';
COMMENT ON COLUMN penguin_igloo_room.music IS 'Igloo music ID'; COMMENT ON COLUMN penguin_igloo_room.music IS 'Igloo music ID';
COMMENT ON COLUMN penguin_igloo_room.locked IS 'Is igloo locked?'; COMMENT ON COLUMN penguin_igloo_room.locked IS 'Is igloo locked?';
COMMENT ON COLUMN penguin_igloo_room.competition IS 'Is entered in competition?';
DROP TABLE IF EXISTS igloo_like; DROP TABLE IF EXISTS igloo_like;
CREATE TABLE igloo_like ( CREATE TABLE igloo_like (
@ -1121,6 +1123,25 @@ COMMENT ON COLUMN login.date IS 'Login date';
COMMENT ON COLUMN login.ip_hash IS 'Connection IP address'; COMMENT ON COLUMN login.ip_hash IS 'Connection IP address';
COMMENT ON COLUMN login.minutes_played IS 'Minutes played for session'; COMMENT ON COLUMN login.minutes_played IS 'Minutes played for session';
DROP TABLE IF EXISTS cfc_donation;
CREATE TABLE cfc_donation (
penguin_id INT NOT NULL,
coins INT NOT NULL,
charity SMALLINT NOT NULL,
date TIMESTAMP NOT NULL,
PRIMARY KEY (penguin_id, charity, date),
CONSTRAINT cfc_donation_ibfk_1 FOREIGN KEY (penguin_id) REFERENCES penguin (id) ON DELETE CASCADE ON UPDATE CASCADE
);
ALTER TABLE cfc_donation ALTER COLUMN date SET DEFAULT now();
COMMENT ON TABLE cfc_donation IS 'CFC charity donations';
COMMENT ON COLUMN cfc_donation.penguin_id IS 'Donator penguin ID';
COMMENT ON COLUMN cfc_donation.coins IS 'Donation coin amount';
COMMENT ON COLUMN cfc_donation.charity IS 'Donation charity or cause';
COMMENT ON COLUMN cfc_donation.date IS 'Date of donation';
DROP TABLE IF EXISTS penguin_postcard; DROP TABLE IF EXISTS penguin_postcard;
CREATE TABLE penguin_postcard ( CREATE TABLE penguin_postcard (
id SERIAL, id SERIAL,

View File

@ -165,3 +165,12 @@ class EpfComMessage(db.Model):
message = db.Column(db.Text, nullable=False) message = db.Column(db.Text, nullable=False)
character_id = db.Column(db.ForeignKey('character.id', ondelete='RESTRICT', onupdate='CASCADE'), nullable=False) character_id = db.Column(db.ForeignKey('character.id', ondelete='RESTRICT', onupdate='CASCADE'), nullable=False)
date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
class CfcDonation(db.Model):
__tablename__ = 'cfc_donation'
penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
coins = db.Column(db.Integer, nullable=False)
charity = db.Column(db.Integer, nullable=False)
date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))

View File

@ -150,7 +150,8 @@ class PenguinIglooRoom(db.Model, RoomMixin):
flooring = db.Column(db.ForeignKey('flooring.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) flooring = db.Column(db.ForeignKey('flooring.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
music = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) music = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
location = db.Column(db.ForeignKey('location.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) location = db.Column(db.ForeignKey('location.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
locked = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) locked = db.Column(db.Boolean, nullable=False, server_default=db.text("true"))
competition = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
internal_id = 2000 internal_id = 2000
name = 'Igloo' name = 'Igloo'

View File

@ -0,0 +1,17 @@
from houdini import handlers
from houdini.handlers import XTPacket
from houdini.data.penguin import CfcDonation
@handlers.handler(XTPacket('e', 'dc'))
async def handle_donate_to_charity(p, charity: int, coins: int):
if p.coins >= coins and 0 <= charity <= 4:
await p.update(coins=p.coins-coins).apply()
await CfcDonation.create(penguin_id=p.id, coins=coins, charity=charity)
await p.send_xt('dc', p.coins)
@handlers.handler(XTPacket('e', 'sig'))
async def handle_igloo_contest_entry(p):
if p.room.igloo and p.room.penguin_id == p.id and not p.room.competition:
await p.room.update(competition=True).apply()