Normalize clan owner data
This commit is contained in:
parent
56342ad993
commit
f0bee3fd98
6 changed files with 57 additions and 24 deletions
app
schemas/models
templates/clans
views/clans
server/clans
|
@ -7,7 +7,6 @@ _.extend ClanSchema.properties,
|
||||||
name: c.shortString()
|
name: c.shortString()
|
||||||
type: {type: 'string', 'enum': ['public']}
|
type: {type: 'string', 'enum': ['public']}
|
||||||
ownerID: c.objectId()
|
ownerID: c.objectId()
|
||||||
ownerName: c.shortString()
|
|
||||||
members: c.array {title: 'Members'}, c.objectId()
|
members: c.array {title: 'Members'}, c.objectId()
|
||||||
|
|
||||||
c.extendBasicProperties ClanSchema, 'Clan'
|
c.extendBasicProperties ClanSchema, 'Clan'
|
||||||
|
|
|
@ -2,10 +2,12 @@ extends /templates/base
|
||||||
|
|
||||||
block content
|
block content
|
||||||
|
|
||||||
h1= clan.get('name')
|
if clan
|
||||||
span.spr.spl.small (owner
|
h1= clan.get('name')
|
||||||
a(href="/user/#{clan.get('ownerID')}")= clan.get('ownerName')
|
if owner
|
||||||
| )
|
span.spr.spl.small (owner
|
||||||
|
a(href="/user/#{clan.get('ownerID')}")= owner.get('name')
|
||||||
|
| )
|
||||||
div
|
div
|
||||||
if isOwner
|
if isOwner
|
||||||
button.btn.btn-sm.btn-warning.delete-clan-btn Delete Clan
|
button.btn.btn-sm.btn-warning.delete-clan-btn Delete Clan
|
||||||
|
@ -14,8 +16,8 @@ block content
|
||||||
else
|
else
|
||||||
button.btn.btn-sm.btn-success.join-clan-btn Join Clan
|
button.btn.btn-sm.btn-success.join-clan-btn Join Clan
|
||||||
|
|
||||||
if clan.get('members')
|
if members
|
||||||
h3 Clan Members (#{clan.get('members').length})
|
h3 Clan Members (#{members.length})
|
||||||
table.table.table-striped.table-condensed
|
table.table.table-striped.table-condensed
|
||||||
thead
|
thead
|
||||||
tr
|
tr
|
||||||
|
|
|
@ -35,7 +35,10 @@ block content
|
||||||
a(href="/clans/#{clan.id}")= clan.get('name')
|
a(href="/clans/#{clan.id}")= clan.get('name')
|
||||||
td= clan.get('members').length
|
td= clan.get('members').length
|
||||||
td
|
td
|
||||||
a(href="/user/#{clan.ownerID}")= clan.get('ownerName')
|
if idNameMap && idNameMap[clan.get('ownerID')]
|
||||||
|
a(href="/user/#{clan.get('ownerID')}")= idNameMap[clan.get('ownerID')]
|
||||||
|
else
|
||||||
|
a(href="/user/#{clan.get('ownerID')}") Anoner
|
||||||
td
|
td
|
||||||
if myClanIDs.indexOf(clan.id) < 0
|
if myClanIDs.indexOf(clan.id) < 0
|
||||||
button.btn.btn-sm.btn-success.join-clan-btn(data-id="#{clan.id}") Join Clan
|
button.btn.btn-sm.btn-success.join-clan-btn(data-id="#{clan.id}") Join Clan
|
||||||
|
@ -63,7 +66,10 @@ block content
|
||||||
a(href="/clans/#{clan.id}")= clan.get('name')
|
a(href="/clans/#{clan.id}")= clan.get('name')
|
||||||
td= clan.get('members').length
|
td= clan.get('members').length
|
||||||
td
|
td
|
||||||
a(href="/user/#{clan.ownerID}")= clan.get('ownerName')
|
if idNameMap && idNameMap[clan.get('ownerID')]
|
||||||
|
a(href="/user/#{clan.get('ownerID')}")= idNameMap[clan.get('ownerID')]
|
||||||
|
else
|
||||||
|
a(href="/user/#{clan.get('ownerID')}") Anoner
|
||||||
td
|
td
|
||||||
if clan.get('ownerID') !== me.id
|
if clan.get('ownerID') !== me.id
|
||||||
button.btn.btn-sm.btn-warning.leave-clan-btn(data-id="#{clan.id}") Leave Clan
|
button.btn.btn-sm.btn-warning.leave-clan-btn(data-id="#{clan.id}") Leave Clan
|
||||||
|
|
|
@ -21,13 +21,7 @@ module.exports = class ClanDetailsView extends RootView
|
||||||
|
|
||||||
constructor: (options, @clanID) ->
|
constructor: (options, @clanID) ->
|
||||||
super options
|
super options
|
||||||
@clan = new Clan _id: @clanID
|
@initData()
|
||||||
@listenTo @clan, 'sync', => @render?()
|
|
||||||
@supermodel.loadModel @clan, 'clan', cache: false
|
|
||||||
@members = new CocoCollection([], { url: "/db/clan/#{clanID}/members", model: User, comparator:'_id' })
|
|
||||||
@listenTo @members, 'sync', => @render?()
|
|
||||||
@supermodel.loadCollection(@members, 'members', {cache: false})
|
|
||||||
@listenTo me, 'sync', => @render?()
|
|
||||||
|
|
||||||
destroy: ->
|
destroy: ->
|
||||||
@stopListening?()
|
@stopListening?()
|
||||||
|
@ -35,11 +29,25 @@ module.exports = class ClanDetailsView extends RootView
|
||||||
getRenderData: ->
|
getRenderData: ->
|
||||||
context = super()
|
context = super()
|
||||||
context.clan = @clan
|
context.clan = @clan
|
||||||
|
context.owner = @owner
|
||||||
context.members = @members.models
|
context.members = @members.models
|
||||||
context.isOwner = @clan.get('ownerID') is me.id
|
context.isOwner = @clan.get('ownerID') is me.id
|
||||||
context.isMember = @clanID in me.get('clans')
|
context.isMember = @clanID in me.get('clans')
|
||||||
context
|
context
|
||||||
|
|
||||||
|
initData: ->
|
||||||
|
@clan = new Clan _id: @clanID
|
||||||
|
@listenTo @clan, 'sync', => @render?()
|
||||||
|
@listenToOnce @clan, 'sync', =>
|
||||||
|
@owner = new User _id: @clan.get('ownerID')
|
||||||
|
@listenTo @owner, 'sync', => @render?()
|
||||||
|
@supermodel.loadModel @owner, 'owner', cache: false
|
||||||
|
@supermodel.loadModel @clan, 'clan', cache: false
|
||||||
|
@members = new CocoCollection([], { url: "/db/clan/#{clanID}/members", model: User, comparator:'_id' })
|
||||||
|
@listenTo @members, 'sync', => @render?()
|
||||||
|
@supermodel.loadCollection(@members, 'members', {cache: false})
|
||||||
|
@listenTo me, 'sync', => @render?()
|
||||||
|
|
||||||
onDeleteClan: (e) ->
|
onDeleteClan: (e) ->
|
||||||
return @openModalView(new AuthModal()) if me.isAnonymous()
|
return @openModalView(new AuthModal()) if me.isAnonymous()
|
||||||
options =
|
options =
|
||||||
|
|
|
@ -20,24 +20,43 @@ module.exports = class MainAdminView extends RootView
|
||||||
|
|
||||||
constructor: (options) ->
|
constructor: (options) ->
|
||||||
super options
|
super options
|
||||||
@publicClans = new CocoCollection([], { url: '/db/clan', model: Clan, comparator:'_id' })
|
@initData()
|
||||||
@listenTo @publicClans, 'sync', => @render?()
|
|
||||||
@supermodel.loadCollection(@publicClans, 'public_clans', {cache: false})
|
|
||||||
@myClans = new CocoCollection([], { url: '/db/user/-/clans', model: Clan, comparator:'_id' })
|
|
||||||
@listenTo @myClans, 'sync', => @render?()
|
|
||||||
@supermodel.loadCollection(@myClans, 'my_clans', {cache: false})
|
|
||||||
@listenTo me, 'sync', => @render?()
|
|
||||||
|
|
||||||
destroy: ->
|
destroy: ->
|
||||||
@stopListening?()
|
@stopListening?()
|
||||||
|
|
||||||
getRenderData: ->
|
getRenderData: ->
|
||||||
context = super()
|
context = super()
|
||||||
|
context.idNameMap = @idNameMap
|
||||||
context.publicClans = @publicClans.models
|
context.publicClans = @publicClans.models
|
||||||
context.myClans = @myClans.models
|
context.myClans = @myClans.models
|
||||||
context.myClanIDs = me.get('clans') ? []
|
context.myClanIDs = me.get('clans') ? []
|
||||||
context
|
context
|
||||||
|
|
||||||
|
initData: ->
|
||||||
|
@idNameMap = {}
|
||||||
|
@publicClans = new CocoCollection([], { url: '/db/clan', model: Clan, comparator:'_id' })
|
||||||
|
@listenTo @publicClans, 'sync', =>
|
||||||
|
@refreshNames @publicClans.models
|
||||||
|
@render?()
|
||||||
|
@supermodel.loadCollection(@publicClans, 'public_clans', {cache: false})
|
||||||
|
@myClans = new CocoCollection([], { url: '/db/user/-/clans', model: Clan, comparator:'_id' })
|
||||||
|
@listenTo @myClans, 'sync', =>
|
||||||
|
@refreshNames @myClans.models
|
||||||
|
@render?()
|
||||||
|
@supermodel.loadCollection(@myClans, 'my_clans', {cache: false})
|
||||||
|
@listenTo me, 'sync', => @render?()
|
||||||
|
|
||||||
|
refreshNames: (clans) ->
|
||||||
|
options =
|
||||||
|
url: '/db/user/-/names'
|
||||||
|
method: 'POST'
|
||||||
|
data: {ids: _.map(clans, (clan) -> clan.get('ownerID'))}
|
||||||
|
success: (models, response, options) =>
|
||||||
|
@idNameMap[userID] = models[userID].name for userID of models
|
||||||
|
@render?()
|
||||||
|
@supermodel.addRequestResource('user_names', options, 0).load()
|
||||||
|
|
||||||
onClickCreateClan: (e) ->
|
onClickCreateClan: (e) ->
|
||||||
return @openModalView(new AuthModal()) if me.isAnonymous()
|
return @openModalView(new AuthModal()) if me.isAnonymous()
|
||||||
if name = $('.create-clan-name').val()
|
if name = $('.create-clan-name').val()
|
||||||
|
|
|
@ -26,7 +26,6 @@ ClanHandler = class ClanHandler extends Handler
|
||||||
userName = req.user.get('name') ? 'Anoner'
|
userName = req.user.get('name') ? 'Anoner'
|
||||||
instance = super(req)
|
instance = super(req)
|
||||||
instance.set 'ownerID', req.user._id
|
instance.set 'ownerID', req.user._id
|
||||||
instance.set 'ownerName', userName
|
|
||||||
instance.set 'members', [req.user._id]
|
instance.set 'members', [req.user._id]
|
||||||
instance
|
instance
|
||||||
|
|
||||||
|
|
Reference in a new issue