69 lines
1.7 KiB
CoffeeScript
69 lines
1.7 KiB
CoffeeScript
|
{_} = require('underscore')
|
||
|
{Formats} = require('../shared/conditions')
|
||
|
config = require('../knexfile')[process.env.NODE_ENV || 'development']
|
||
|
|
||
|
knex = require('knex')(config)
|
||
|
bookshelf = require('bookshelf')(knex)
|
||
|
|
||
|
# Postgres 9.2+ support the JSON datatype. Other versions/DBs do not.
|
||
|
# So if the JSON data type is supported, then loading will load as JSON.
|
||
|
jsonify = (contents) ->
|
||
|
if _.isObject(contents)
|
||
|
contents
|
||
|
else if !contents || !contents.length
|
||
|
{}
|
||
|
else
|
||
|
JSON.parse(contents)
|
||
|
|
||
|
Team = bookshelf.Model.extend
|
||
|
tableName: 'teams'
|
||
|
hasTimestamps: ['created_at', 'updated_at']
|
||
|
|
||
|
toJSON: -> {
|
||
|
id: @id
|
||
|
name: @get('name')
|
||
|
generation: @get('generation')
|
||
|
pokemon: jsonify(@get('contents'))
|
||
|
}
|
||
|
|
||
|
Teams = bookshelf.Collection.extend
|
||
|
model: Team
|
||
|
|
||
|
Battle = bookshelf.Model.extend
|
||
|
tableName: 'battles'
|
||
|
hasTimestamps: ['created_at', 'updated_at']
|
||
|
|
||
|
# TODO: Find (and jsonify) asset versions
|
||
|
|
||
|
getName: ->
|
||
|
@get('name') || @getPlayerNames().join(' vs. ') || 'Untitled'
|
||
|
|
||
|
getFormat: ->
|
||
|
Formats[@get('format')].humanName
|
||
|
|
||
|
getPlayerNames: ->
|
||
|
# players is denormalized. It's an array with a comma delimiter.
|
||
|
@get('players')?.split(',') || []
|
||
|
|
||
|
version: (js) ->
|
||
|
jsonify(@get('versions'))[js]
|
||
|
|
||
|
toJSON: -> {
|
||
|
id: @get('battle_id')
|
||
|
name: @getName()
|
||
|
format: @get('format')
|
||
|
numActive: @get('num_active')
|
||
|
players: @getPlayerNames()
|
||
|
contents: jsonify(@get('contents'))
|
||
|
created_at: @get('created_at')
|
||
|
}
|
||
|
|
||
|
SavedBattle = bookshelf.Model.extend
|
||
|
tableName: 'saved_battles'
|
||
|
hasTimestamps: ['created_at', 'updated_at']
|
||
|
|
||
|
SavedBattles = bookshelf.Collection.extend
|
||
|
model: SavedBattle
|
||
|
|
||
|
module.exports = {Team, Teams, Battle, SavedBattle, SavedBattles, knex}
|