mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Join clan
This commit is contained in:
parent
482b66b8a4
commit
b48de3d74d
5 changed files with 104 additions and 15 deletions
|
@ -28,7 +28,7 @@ block content
|
|||
td
|
||||
a(href="/user/#{member.id}")= member.name
|
||||
td= member.level
|
||||
if member.id !== clan.get('ownerID')
|
||||
if isOwner && member.id !== clan.get('ownerID')
|
||||
td
|
||||
button.btn.btn-sm.btn-warning Remove Member
|
||||
else
|
||||
|
|
|
@ -38,7 +38,7 @@ block content
|
|||
a(href="/user/#{clan.ownerID}")= clan.get('ownerName')
|
||||
td
|
||||
if myClanIDs.indexOf(clan.id) < 0
|
||||
button.btn.btn-sm.btn-success Join Clan
|
||||
button.btn.btn-sm.btn-success.join-clan-btn(data-id="#{clan.id}") Join Clan
|
||||
else if clan.get('ownerID') !== me.id
|
||||
button.btn.btn-sm.btn-warning Leave Clan
|
||||
|
||||
|
@ -57,7 +57,10 @@ block content
|
|||
each clan in myClans
|
||||
tr
|
||||
td
|
||||
a(href="/clans/#{clan.id}")= clan.get('name')
|
||||
if clan.get('ownerID') === me.id
|
||||
a(href="/clans/#{clan.id}", style='font-weight:bold')= clan.get('name')
|
||||
else
|
||||
a(href="/clans/#{clan.id}")= clan.get('name')
|
||||
td= clan.get('members').length
|
||||
td
|
||||
a(href="/user/#{clan.ownerID}")= clan.get('ownerName')
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
app = require 'core/application'
|
||||
AuthModal = require 'views/core/AuthModal'
|
||||
RootView = require 'views/core/RootView'
|
||||
template = require 'templates/clans/clans'
|
||||
CocoCollection = require 'collections/CocoCollection'
|
||||
|
@ -10,6 +11,7 @@ module.exports = class MainAdminView extends RootView
|
|||
|
||||
events:
|
||||
'click .create-clan-btn': 'onClickCreateClan'
|
||||
'click .join-clan-btn': 'onJoinClan'
|
||||
|
||||
constructor: (options) ->
|
||||
super options
|
||||
|
@ -19,11 +21,14 @@ module.exports = class MainAdminView extends RootView
|
|||
getRenderData: ->
|
||||
context = super()
|
||||
context.publicClans = @publicClans.models
|
||||
context.myClans = @publicClans.where({ownerID: me.get('_id')})
|
||||
context.myClans = _.filter @publicClans.models, (c) ->
|
||||
return true if c.ownerID is me.get('_id')
|
||||
return true for member in c.get('members') when me.get('_id') is member.id
|
||||
context.myClanIDs = _.map context.myClans, (c) -> c.id
|
||||
context
|
||||
|
||||
onClickCreateClan: (e) ->
|
||||
return @openModalView(new AuthModal()) if me.isAnonymous()
|
||||
if name = $('.create-clan-name').val()
|
||||
# TODO: async creating message
|
||||
clan = new Clan()
|
||||
|
@ -31,10 +36,25 @@ module.exports = class MainAdminView extends RootView
|
|||
clan.set 'name', name
|
||||
clan.save {},
|
||||
error: (model, response, options) =>
|
||||
console.error 'Error saving clan', response
|
||||
console.error 'Error saving clan', response.status
|
||||
success: (model, response, options) =>
|
||||
app.router.navigate "/clans/#{model.id}"
|
||||
window.location.reload()
|
||||
else
|
||||
# TODO: Invalid name message
|
||||
console.log 'Invalid name'
|
||||
|
||||
onJoinClan: (e) ->
|
||||
return @openModalView(new AuthModal()) if me.isAnonymous()
|
||||
if clanID = $(e.target).data('id')
|
||||
options =
|
||||
url: "/db/clan/#{clanID}/join"
|
||||
method: 'PUT'
|
||||
error: (model, response, options) =>
|
||||
console.error 'Error joining clan', response
|
||||
success: (model, response, options) =>
|
||||
console.log 'Joined clan', clanID
|
||||
@render()
|
||||
@supermodel.addRequestResource( 'join_clan', options).load()
|
||||
else
|
||||
console.error "No clan ID attached to join button."
|
||||
|
|
|
@ -20,12 +20,29 @@ ClanHandler = class ClanHandler extends Handler
|
|||
false
|
||||
|
||||
makeNewInstance: (req) ->
|
||||
userName = req.user.get('name') ? 'Anoner'
|
||||
instance = super(req)
|
||||
instance.set 'ownerID', req.user._id
|
||||
instance.set 'ownerName', req.user.name
|
||||
instance.set 'ownerName', userName
|
||||
instance.set 'members', [
|
||||
{id: req.user._id, name: req.user.name, level: req.user.level()}
|
||||
{id: req.user._id, name: userName, level: req.user.level()}
|
||||
]
|
||||
instance
|
||||
|
||||
getByRelationship: (req, res, args...) ->
|
||||
return @joinClan(req, res, args[0]) if args[1] is 'join'
|
||||
super(arguments...)
|
||||
|
||||
joinClan: (req, res, clanID) ->
|
||||
return @sendForbiddenError(res) unless req.user? and not req.user.isAnonymous()
|
||||
Clan.findById clanID, (err, clan) =>
|
||||
return @sendSuccess(res, clan) if _.find clan.get('members'), (m) -> m.id.equals req.user.id
|
||||
member =
|
||||
id: req.user._id
|
||||
name: req.user.get('name') ? 'Anoner'
|
||||
level: req.user.level()
|
||||
Clan.update {_id: clanID}, {$push: {members: member}}, (err) =>
|
||||
return @sendDatabaseError(res, err) if err
|
||||
@sendSuccess(res)
|
||||
|
||||
module.exports = new ClanHandler()
|
||||
|
|
|
@ -7,7 +7,11 @@ describe 'Clans', ->
|
|||
stripe = require('stripe')(config.stripe.secretKey)
|
||||
clanURL = getURL('/db/clan')
|
||||
|
||||
createClan = (type, name, done) ->
|
||||
clanCount = 0
|
||||
createClanName = (name) -> name + clanCount++
|
||||
|
||||
createClan = (type, done) ->
|
||||
name = createClanName 'myclan'
|
||||
requestBody =
|
||||
type: type
|
||||
name: name
|
||||
|
@ -28,14 +32,14 @@ describe 'Clans', ->
|
|||
|
||||
it 'Create clan', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
createClan 'public', 'myclan1', (clan) ->
|
||||
createClan 'public', (clan) ->
|
||||
done()
|
||||
|
||||
it 'Anonymous create clan 401', (done) ->
|
||||
logoutUser ->
|
||||
requestBody =
|
||||
type: 'public'
|
||||
name: 'myclan1'
|
||||
name: createClanName 'myclan'
|
||||
request.post {uri: clanURL, json: requestBody }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(401)
|
||||
|
@ -44,7 +48,7 @@ describe 'Clans', ->
|
|||
it 'Create clan missing type 422', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
requestBody =
|
||||
name: 'myclan1'
|
||||
name: createClanName 'myclan'
|
||||
request.post {uri: clanURL, json: requestBody }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(422)
|
||||
|
@ -61,8 +65,8 @@ describe 'Clans', ->
|
|||
|
||||
it 'Get clans', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
createClan 'public', 'myclan2', ->
|
||||
createClan 'public', 'myclan3', ->
|
||||
createClan 'public', (clan1) ->
|
||||
createClan 'public', (clan2) ->
|
||||
request.get {uri: clanURL }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(200)
|
||||
|
@ -71,11 +75,56 @@ describe 'Clans', ->
|
|||
|
||||
it 'Get clans anonymous', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
createClan 'public', 'myclan4', ->
|
||||
createClan 'public', 'myclan5', ->
|
||||
createClan 'public', (clan1) ->
|
||||
createClan 'public', (clan2) ->
|
||||
logoutUser ->
|
||||
request.get {uri: clanURL }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(200)
|
||||
expect(body.length).toBeGreaterThan(1)
|
||||
done()
|
||||
|
||||
it 'Join clan', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
createClan 'public', (clan1) ->
|
||||
loginNewUser (user2) ->
|
||||
request.put {uri: "#{clanURL}/#{clan1.id}/join" }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(200)
|
||||
Clan.findById clan1.id, (err, clan1) ->
|
||||
expect(err).toBeNull()
|
||||
expect(_.find clan1.get('members'), (m) -> m.id.equals user2.id).toBeDefined()
|
||||
done()
|
||||
|
||||
it 'Join invalid clan 404', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
createClan 'public', (clan1) ->
|
||||
loginNewUser (user2) ->
|
||||
request.put {uri: "#{clanURL}/1234/join" }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(404)
|
||||
done()
|
||||
|
||||
it 'Join clan anonymous 401', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
createClan 'public', (clan1) ->
|
||||
logoutUser ->
|
||||
request.put {uri: "#{clanURL}/#{clan1.id}/join" }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(401)
|
||||
done()
|
||||
|
||||
it 'Join clan twice 200', (done) ->
|
||||
loginNewUser (user1) ->
|
||||
createClan 'public', (clan1) ->
|
||||
loginNewUser (user2) ->
|
||||
request.put {uri: "#{clanURL}/#{clan1.id}/join" }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(200)
|
||||
Clan.findById clan1.id, (err, clan1) ->
|
||||
expect(err).toBeNull()
|
||||
expect(_.find clan1.get('members'), (m) -> m.id.equals user2.id).toBeDefined()
|
||||
request.put {uri: "#{clanURL}/#{clan1.id}/join" }, (err, res, body) ->
|
||||
expect(err).toBeNull()
|
||||
expect(res.statusCode).toBe(200)
|
||||
done()
|
||||
|
|
Loading…
Reference in a new issue