diff --git a/source/BaselineOfTeamsApi/BaselineOfTeamsApi.class.st b/source/BaselineOfTeamsApi/BaselineOfTeamsApi.class.st index d71f6a2..c9c4433 100644 --- a/source/BaselineOfTeamsApi/BaselineOfTeamsApi.class.st +++ b/source/BaselineOfTeamsApi/BaselineOfTeamsApi.class.st @@ -19,12 +19,13 @@ BaselineOfTeamsApi >> baseline: spec [ { #category : #accessing } BaselineOfTeamsApi >> baselineTeamsApi: spec [ + spec package: 'TeamsAPI-Core' with: [ spec requires: #('Kepler') ]; - group: 'Deployment' with: 'TeamsAPI-Core'; package: 'TeamsAPI-Core-Tests' - with: [ spec requires: 'Deployment' ]; - group: 'Tests' with: 'TeamsAPI-Core-Tests' + with: [ spec requires: #('Deployment') ]; + group: 'Deployment' with: #('TeamsAPI-Core'); + group: 'Tests' with: #('TeamsAPI-Core-Tests') ] { #category : #accessing } diff --git a/source/TeamsAPI-Core-Tests/PeopleRESTfulControllerSpecificationTest.class.st b/source/TeamsAPI-Core-Tests/PeopleRESTfulControllerSpecificationTest.class.st new file mode 100644 index 0000000..f6ae792 --- /dev/null +++ b/source/TeamsAPI-Core-Tests/PeopleRESTfulControllerSpecificationTest.class.st @@ -0,0 +1,18 @@ +Class { + #name : #PeopleRESTfulControllerSpecificationTest, + #superclass : #TestCase, + #category : #'TeamsAPI-Core-Tests-Controllers' +} + +{ #category : #'as yet unclassified' } +PeopleRESTfulControllerSpecificationTest >> testTemplate [ + + | spec | + + spec := PeopleRESTfulControllerSpecification new. + + self + assert: spec addTemplate equals: '/people/'; + assert: spec listTemplate equals: '/people'; + assert: spec detailTemplate equals: '/people/' +] diff --git a/source/TeamsAPI-Core-Tests/PeopleRESTfulControllerTest.class.st b/source/TeamsAPI-Core-Tests/PeopleRESTfulControllerTest.class.st new file mode 100644 index 0000000..3b209b2 --- /dev/null +++ b/source/TeamsAPI-Core-Tests/PeopleRESTfulControllerTest.class.st @@ -0,0 +1,108 @@ +Class { + #name : #PeopleRESTfulControllerTest, + #superclass : #ResourceRESTfulControllerTest, + #instVars : [ + 'peopleManagementSystem' + ], + #category : #'TeamsAPI-Core-Tests-Controllers' +} + +{ #category : #test } +PeopleRESTfulControllerTest >> baseUrl [ + + ^ 'http://people.mercap.net' asZnUrl +] + +{ #category : #'block support' } +PeopleRESTfulControllerTest >> defaultPersonMediaType [ + ^ resourceController specification personVersion1dot0dot0MediaType +] + +{ #category : #'block support' } +PeopleRESTfulControllerTest >> registerPerson: aPerson [ + + peopleManagementSystem startManagingPerson: aPerson +] + +{ #category : #'block support' } +PeopleRESTfulControllerTest >> requestToCreatePersonFrom: json [ + + ^ self requestToPOST: json as: self defaultPersonMediaType +] + +{ #category : #'block support' } +PeopleRESTfulControllerTest >> requestToGet: aUrl accepting: anAcceptHeader [ + + ^ TeaRequest + fromZnRequest: + ((ZnRequest get: aUrl) + setAccept: anAcceptHeader; + yourself) +] + +{ #category : #'block support' } +PeopleRESTfulControllerTest >> requestToGetPeopleAccepting: anAcceptHeader [ + + ^ self requestToGet: self resourceUrl accepting: anAcceptHeader +] + +{ #category : #test } +PeopleRESTfulControllerTest >> setUp [ + + peopleManagementSystem := PeopleManagementSystem new. + super setUp +] + +{ #category : #test } +PeopleRESTfulControllerTest >> setUpResourceController [ + + resourceController := PeopleRESTfulController + for: peopleManagementSystem +] + +{ #category : #tests } +PeopleRESTfulControllerTest >> testGetWhenNoPeopleRegistered [ + + | response | + + response := resourceController + getPeopleBasedOn: (self requestToGetPeopleAccepting: '*/*') + within: self newHttpRequestContext. + + self + assert: response isSuccess; + assert: response status equals: 200; + assert: response contentType asMediaType + equals: resourceController specification personVersion1dot0dot0MediaType. + + self + withJsonFromContentsIn: response + do: [ :people | self assert: people isEmpty ] +] + +{ #category : #tests } +PeopleRESTfulControllerTest >> testPersonCreation [ + + | response | + + response := resourceController + createPersonBasedOn: + (self + requestToCreatePersonFrom: + '{"name":"Roberto","lastName":"Rodriguez","email":"r.rodriguez@gmail.com"}') + within: self newHttpRequestContext. + self + assert: response isSuccess; + assert: response status equals: 201; + assertUrl: response location + equals: 'http://people.mercap.net/people/1'; + assert: response hasEntity; + assert: peopleManagementSystem people size equals: 1; + assert: peopleManagementSystem people first name equals: 'Roberto' +] + +{ #category : #test } +PeopleRESTfulControllerTest >> urlOf: aPerson [ + + ^ (self resourceUrl / aPerson uuid asString) asString +] diff --git a/source/TeamsAPI-Core-Tests/PersonSystemTest.class.st b/source/TeamsAPI-Core-Tests/PersonManagementSystemTest.class.st similarity index 79% rename from source/TeamsAPI-Core-Tests/PersonSystemTest.class.st rename to source/TeamsAPI-Core-Tests/PersonManagementSystemTest.class.st index d21fc8a..7211ab6 100644 --- a/source/TeamsAPI-Core-Tests/PersonSystemTest.class.st +++ b/source/TeamsAPI-Core-Tests/PersonManagementSystemTest.class.st @@ -2,16 +2,16 @@ A PersonSystemTest is a test class for testing the behavior of PersonSystem " Class { - #name : #PersonSystemTest, + #name : #PersonManagementSystemTest, #superclass : #TestCase, #instVars : [ 'rootSystem' ], - #category : #'TeamsAPI-Core-Tests' + #category : #'TeamsAPI-Core-Tests-Systems' } { #category : #acccessing } -PersonSystemTest >> lucasRojas [ +PersonManagementSystemTest >> lucasRojas [ ^ Person named: 'Lucas' surnamed: 'Rojas' @@ -19,22 +19,22 @@ PersonSystemTest >> lucasRojas [ ] { #category : #acccessing } -PersonSystemTest >> personSystem [ +PersonManagementSystemTest >> personSystem [ ^ rootSystem systemImplementing: #PersonSystemInterface ] { #category : #initializing } -PersonSystemTest >> setUp [ +PersonManagementSystemTest >> setUp [ super setUp. rootSystem := CompositeSystem new. rootSystem - register: PersonSystem new; - register: TeamSystem new; + register: PeopleManagementSystem new; + register: TeamManagementSystem new; startUp ] { #category : #tests } -PersonSystemTest >> testAddPerson [ +PersonManagementSystemTest >> testAddPerson [ | person personSystem | person := self lucasRojas. personSystem := self personSystem. @@ -45,7 +45,7 @@ PersonSystemTest >> testAddPerson [ ] { #category : #tests } -PersonSystemTest >> testDeletePerson [ +PersonManagementSystemTest >> testDeletePerson [ | person personSystem | person := self lucasRojas. personSystem := self personSystem. @@ -58,7 +58,7 @@ PersonSystemTest >> testDeletePerson [ ] { #category : #tests } -PersonSystemTest >> testFailToDeletePersonAlreadyDeleted [ +PersonManagementSystemTest >> testFailToDeletePersonAlreadyDeleted [ | person personSystem | person := self lucasRojas. personSystem := self personSystem. @@ -79,7 +79,7 @@ PersonSystemTest >> testFailToDeletePersonAlreadyDeleted [ ] { #category : #tests } -PersonSystemTest >> testFailWhenAddingAPersonWithSameEmailAddress [ +PersonManagementSystemTest >> testFailWhenAddingAPersonWithSameEmailAddress [ | person personSystem personWithSameEmail | person := self lucasRojas. personWithSameEmail := Person @@ -101,6 +101,6 @@ PersonSystemTest >> testFailWhenAddingAPersonWithSameEmailAddress [ ] { #category : #tests } -PersonSystemTest >> testGetPeopleOnEmptySystem [ +PersonManagementSystemTest >> testGetPeopleOnEmptySystem [ self assert: self personSystem people isEmpty ] diff --git a/source/TeamsAPI-Core-Tests/PersonTest.class.st b/source/TeamsAPI-Core-Tests/PersonTest.class.st index 3fd7f07..86cfbd8 100644 --- a/source/TeamsAPI-Core-Tests/PersonTest.class.st +++ b/source/TeamsAPI-Core-Tests/PersonTest.class.st @@ -1,7 +1,7 @@ Class { #name : #PersonTest, #superclass : #TestCase, - #category : #'TeamsAPI-Core-Tests' + #category : #'TeamsAPI-Core-Tests-Model' } { #category : #tests } diff --git a/source/TeamsAPI-Core-Tests/TeamSystemTest.class.st b/source/TeamsAPI-Core-Tests/TeamManagementSystemTest.class.st similarity index 83% rename from source/TeamsAPI-Core-Tests/TeamSystemTest.class.st rename to source/TeamsAPI-Core-Tests/TeamManagementSystemTest.class.st index 457a90d..56ee420 100644 --- a/source/TeamsAPI-Core-Tests/TeamSystemTest.class.st +++ b/source/TeamsAPI-Core-Tests/TeamManagementSystemTest.class.st @@ -2,18 +2,18 @@ A TeamSystemTest is a test class for testing the behavior of TeamSystem " Class { - #name : #TeamSystemTest, + #name : #TeamManagementSystemTest, #superclass : #TestCase, #instVars : [ 'person', 'anotherPerson', 'rootSystem' ], - #category : #'TeamsAPI-Core-Tests' + #category : #'TeamsAPI-Core-Tests-Systems' } { #category : #running } -TeamSystemTest >> setUp [ +TeamManagementSystemTest >> setUp [ super setUp. person := Person named: 'Lucas' @@ -25,18 +25,18 @@ TeamSystemTest >> setUp [ withEmailAddress: 'r.pasco@gmail.com'. rootSystem := CompositeSystem new. rootSystem - register: PersonSystem new; - register: TeamSystem new; + register: PeopleManagementSystem new; + register: TeamManagementSystem new; startUp ] { #category : #tests } -TeamSystemTest >> teamSystem [ +TeamManagementSystemTest >> teamSystem [ ^ rootSystem systemImplementing: #TeamSystemInterface ] { #category : #tests } -TeamSystemTest >> testAddTeam [ +TeamManagementSystemTest >> testAddTeam [ | team teamSystem | team := Team named: 'Linces' @@ -49,7 +49,7 @@ TeamSystemTest >> testAddTeam [ ] { #category : #tests } -TeamSystemTest >> testDeleteATeamAlreadyDeleted [ +TeamManagementSystemTest >> testDeleteATeamAlreadyDeleted [ | team teamSystem | team := Team named: 'Linces' @@ -71,7 +71,7 @@ TeamSystemTest >> testDeleteATeamAlreadyDeleted [ ] { #category : #tests } -TeamSystemTest >> testDeleteTeam [ +TeamManagementSystemTest >> testDeleteTeam [ | team teamSystem | team := Team named: 'Linces' @@ -86,7 +86,7 @@ TeamSystemTest >> testDeleteTeam [ ] { #category : #tests } -TeamSystemTest >> testFailToAddTeamWithNamedAlreadyUsed [ +TeamManagementSystemTest >> testFailToAddTeamWithNamedAlreadyUsed [ | team teamWithSameName teamSystem | team := Team named: 'Linces' @@ -109,6 +109,6 @@ TeamSystemTest >> testFailToAddTeamWithNamedAlreadyUsed [ ] { #category : #tests } -TeamSystemTest >> testGetTeamsOnEmptySystem [ +TeamManagementSystemTest >> testGetTeamsOnEmptySystem [ self assert: self teamSystem teams isEmpty ] diff --git a/source/TeamsAPI-Core-Tests/TeamTest.class.st b/source/TeamsAPI-Core-Tests/TeamTest.class.st index ce3ca10..2dfce73 100644 --- a/source/TeamsAPI-Core-Tests/TeamTest.class.st +++ b/source/TeamsAPI-Core-Tests/TeamTest.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'defaultPerson' ], - #category : #'TeamsAPI-Core-Tests' + #category : #'TeamsAPI-Core-Tests-Model' } { #category : #initialization } diff --git a/source/TeamsAPI-Core/ManifestTeamsAPISystem.class.st b/source/TeamsAPI-Core/ManifestTeamsAPISystem.class.st index 4788cf3..c547d75 100644 --- a/source/TeamsAPI-Core/ManifestTeamsAPISystem.class.st +++ b/source/TeamsAPI-Core/ManifestTeamsAPISystem.class.st @@ -1,7 +1,7 @@ Class { #name : #ManifestTeamsAPISystem, #superclass : #PackageManifest, - #category : #'TeamsAPI-Core' + #category : #'TeamsAPI-Core-Systems' } { #category : #'class initialization' } diff --git a/source/TeamsAPI-Core/PeopleManagementSystem.class.st b/source/TeamsAPI-Core/PeopleManagementSystem.class.st new file mode 100644 index 0000000..7b7c58a --- /dev/null +++ b/source/TeamsAPI-Core/PeopleManagementSystem.class.st @@ -0,0 +1,79 @@ +Class { + #name : #PeopleManagementSystem, + #superclass : #SubsystemImplementation, + #instVars : [ + 'people', + 'uuidProvider' + ], + #category : #'TeamsAPI-Core-Systems' +} + +{ #category : #installing } +PeopleManagementSystem >> dependencies [ + ^ #() +] + +{ #category : #installing } +PeopleManagementSystem >> getNewUUID [ + + | newId | + + newId := uuidProvider. + uuidProvider := newId + 1. + ^ newId +] + +{ #category : #installing } +PeopleManagementSystem >> implementedInterfaces [ + ^ #(#PersonSystemInterface) +] + +{ #category : #installing } +PeopleManagementSystem >> initialize [ + + super initialize. + uuidProvider := 1. + people := OrderedCollection new +] + +{ #category : #accessing } +PeopleManagementSystem >> name [ + + ^ 'People Management System' +] + +{ #category : #accessing } +PeopleManagementSystem >> people [ + ^ people +] + +{ #category : #accessing } +PeopleManagementSystem >> personIdentifiedBy: anUUID ifFound: aFoundBlock ifNone: aNoneFoundBlock [ + + ^ people + detect: [ :person | person uuid = anUUID ] + ifFound: aFoundBlock + ifNone: aNoneFoundBlock +] + +{ #category : #accessing } +PeopleManagementSystem >> startManagingPerson: aPerson [ + + AssertionChecker + enforce: [ people + noneSatisfy: [ :person | person emailAddress = aPerson emailAddress ] ] + because: + ('There''s already a person registered in our system with the email address: <1s>.' + expandMacrosWith: aPerson emailAddress). + aPerson uuid: self getNewUUID. + people add: aPerson +] + +{ #category : #accessing } +PeopleManagementSystem >> stopManagingPerson: aPerson [ + AssertionChecker + enforce: [ people anySatisfy: [ :person | person = aPerson ] ] + because: + 'TStop managing person failed because it does not exist in the system.'. + people remove: aPerson +] diff --git a/source/TeamsAPI-Core/PeopleRESTfulController.class.st b/source/TeamsAPI-Core/PeopleRESTfulController.class.st new file mode 100644 index 0000000..4fa9f57 --- /dev/null +++ b/source/TeamsAPI-Core/PeopleRESTfulController.class.st @@ -0,0 +1,93 @@ +Class { + #name : #PeopleRESTfulController, + #superclass : #ResourceRESTfulController, + #instVars : [ + 'peopleManagementSystem' + ], + #category : #'TeamsAPI-Core-Controllers' +} + +{ #category : #'instance creation' } +PeopleRESTfulController class >> for: aPeopleManagementSystem [ + + ^ self new initializeFor: aPeopleManagementSystem +] + +{ #category : #'private - support' } +PeopleRESTfulController >> createPersonBasedOn: anHttpRequest within: aContext [ + + ^ self + withCreatedResourceDo: [ :newPerson | + peopleManagementSystem startManagingPerson: newPerson. + newPerson ] + decodedUsing: self specification personMappingKey + basedOn: anHttpRequest + within: aContext +] + +{ #category : #'private - accessing' } +PeopleRESTfulController >> entityTagOf: aResource encodedAs: mediaType [ + + ^ ZnETag with: (MD5 hashMessage: aResource printString) hex +] + +{ #category : #'private - support' } +PeopleRESTfulController >> getPeopleBasedOn: aTeaRequest within: aContext [ + + ^ self + get: [ peopleManagementSystem people ] + asCollectionEncodedUsing: self specification peopleMappingKey + basedOn: aTeaRequest + within: aContext +] + +{ #category : #'private - support' } +PeopleRESTfulController >> getPersonBasedOn: anHttpRequest within: aContext [ + + ^ self + get: [ | uuid | + + uuid := UUID fromString: (anHttpRequest at: #identifier). + peopleManagementSystem + personIdentifiedBy: uuid + ifFound: #yourself + ifNone: [ ObjectNotFound signal ] ] + encodedUsing: self specification personMappingKey + basedOn: anHttpRequest + within: aContext +] + +{ #category : #'private - support' } +PeopleRESTfulController >> initializeFor: aPeopleManagementSystem [ + + peopleManagementSystem := aPeopleManagementSystem +] + +{ #category : #'private - accessing' } +PeopleRESTfulController >> locationOf: aResource [ + + | baseUrl | + + baseUrl := (baseUrlOptional withContentDo: #yourself ifUnused: [ '' ]) + asZnUrl. + + ^ baseUrl / self specification endpoint + / aResource uuid printString asZnUrl +] + +{ #category : #'private - accessing' } +PeopleRESTfulController >> provideHypermediaPolicy [ + + ^ HypermediaDrivenRESTfulControllerPolicy for: self +] + +{ #category : #'private - accessing' } +PeopleRESTfulController >> providePaginationPolicy [ + + ^ RESTfulControllerDoNotPaginateCollectionsPolicy for: self +] + +{ #category : #specification } +PeopleRESTfulController >> specification [ + ^ PeopleRESTfulControllerSpecification new +] diff --git a/source/TeamsAPI-Core/PeopleRESTfulControllerSpecification.class.st b/source/TeamsAPI-Core/PeopleRESTfulControllerSpecification.class.st new file mode 100644 index 0000000..eb24fc7 --- /dev/null +++ b/source/TeamsAPI-Core/PeopleRESTfulControllerSpecification.class.st @@ -0,0 +1,114 @@ +Class { + #name : #PeopleRESTfulControllerSpecification, + #superclass : #ResourceRESTfulControllerSpecification, + #category : #'TeamsAPI-Core-Controllers' +} + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> addJsonPeopleVersion1dot0dot0MappingIn: aBuilder [ + + self + addJsonPeopleVersion1dot0dot0MappingIn: aBuilder + withHypermediaFrom: [ :resource :context :mapping | + mapping + mapAsHypermediaControls: [ :period | context hypermediaControlsFor: period ] ] + encoding: self peopleMappingKey +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> addJsonPeopleVersion1dot0dot0MappingIn: aBuilder withHypermediaFrom: hypermediaControlsMapping encoding: aMappingKey [ + + aBuilder + addDefaultRuleToEncode: aMappingKey + to: self personVersion1dot0dot0MediaType + using: [ :resource :context | + String + streamContents: [ :stream | + (NeoJSONWriter on: stream) + for: Person + do: [ :mapping | + mapping mapAccessors: #(#name #lastName #email). + hypermediaControlsMapping + value: resource + value: context + value: mapping ]; + nextPut: resource ] ] +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> addJsonPersonVersion1dot0dot0DecoderMappingIn: aBuilder [ + + aBuilder + addDefaultRuleToDecode: self personVersion1dot0dot0MediaType + to: self personMappingKey + using: [ :json :context | + | raw | + + raw := NeoJSONObject fromString: json. + Person + named: raw name + surnamed: raw lastName + withEmailAddress: raw email ] +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> addJsonPersonVersion1dot0dot0MappingIn: aBuilder [ + + self + addJsonPeopleVersion1dot0dot0MappingIn: aBuilder + withHypermediaFrom: + [ :resource :context :mapping | mapping mapHypermediaControlsIn: context ] + encoding: self personMappingKey +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> addTemplate [ + + ^ '<1s>/%<<2s>:IsInteger>' + expandMacrosWith: self endpoint + with: self identifierKey +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> detailTemplate [ + + ^ '<1s>/%<<2s>:IsInteger>' + expandMacrosWith: self endpoint + with: self identifierKey +] + +{ #category : #'private - accessing' } +PeopleRESTfulControllerSpecification >> endpoint [ + + ^ '/people' +] + +{ #category : #'private - accessing' } +PeopleRESTfulControllerSpecification >> identifierKey [ + + ^ #identifier +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> listTemplate [ + + ^ self endpoint +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> peopleMappingKey [ + + ^ 'people' +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> personMappingKey [ + + ^ 'person' +] + +{ #category : #accessing } +PeopleRESTfulControllerSpecification >> personVersion1dot0dot0MediaType [ + + ^ 'application/vnd.stargate.person+json;version=1.0.0' asMediaType +] diff --git a/source/TeamsAPI-Core/Person.class.st b/source/TeamsAPI-Core/Person.class.st index b18079e..63bd019 100644 --- a/source/TeamsAPI-Core/Person.class.st +++ b/source/TeamsAPI-Core/Person.class.st @@ -4,9 +4,10 @@ Class { #instVars : [ 'name', 'lastName', - 'emailAddress' + 'emailAddress', + 'uuid' ], - #category : #'TeamsAPI-Core' + #category : #'TeamsAPI-Core-Model' } { #category : #'private-assertions' } @@ -49,3 +50,15 @@ Person >> lastName [ Person >> name [ ^ name ] + +{ #category : #Accessing } +Person >> uuid [ + + ^ uuid +] + +{ #category : #Accessing } +Person >> uuid: anInteger [ + + uuid := anInteger +] diff --git a/source/TeamsAPI-Core/PersonSystem.class.st b/source/TeamsAPI-Core/PersonSystem.class.st deleted file mode 100644 index 5a142cd..0000000 --- a/source/TeamsAPI-Core/PersonSystem.class.st +++ /dev/null @@ -1,49 +0,0 @@ -Class { - #name : #PersonSystem, - #superclass : #SubsystemImplementation, - #instVars : [ - 'people' - ], - #category : #'TeamsAPI-Core' -} - -{ #category : #installing } -PersonSystem >> dependencies [ - ^ #() -] - -{ #category : #installing } -PersonSystem >> implementedInterfaces [ - ^ #(#PersonSystemInterface) -] - -{ #category : #installing } -PersonSystem >> initialize [ - super initialize. - people := OrderedCollection new -] - -{ #category : #accessing } -PersonSystem >> people [ - ^ people -] - -{ #category : #accessing } -PersonSystem >> startManagingPerson: aPerson [ - AssertionChecker - enforce: [ people - noneSatisfy: [ :person | person emailAddress = aPerson emailAddress ] ] - because: - ('There''s already a person registered in our system with the email address: <1s>.' - expandMacrosWith: aPerson emailAddress). - people add: aPerson -] - -{ #category : #accessing } -PersonSystem >> stopManagingPerson: aPerson [ - AssertionChecker - enforce: [ people anySatisfy: [ :person | person = aPerson ] ] - because: - 'TStop managing person failed because it does not exist in the system.'. - people remove: aPerson -] diff --git a/source/TeamsAPI-Core/Team.class.st b/source/TeamsAPI-Core/Team.class.st index d031471..13c66a9 100644 --- a/source/TeamsAPI-Core/Team.class.st +++ b/source/TeamsAPI-Core/Team.class.st @@ -5,7 +5,7 @@ Class { 'name', 'members' ], - #category : #'TeamsAPI-Core' + #category : #'TeamsAPI-Core-Model' } { #category : #'instance creatio' } diff --git a/source/TeamsAPI-Core/TeamSystem.class.st b/source/TeamsAPI-Core/TeamManagementSystem.class.st similarity index 64% rename from source/TeamsAPI-Core/TeamSystem.class.st rename to source/TeamsAPI-Core/TeamManagementSystem.class.st index 48e9b0f..c01e5fc 100644 --- a/source/TeamsAPI-Core/TeamSystem.class.st +++ b/source/TeamsAPI-Core/TeamManagementSystem.class.st @@ -1,30 +1,36 @@ Class { - #name : #TeamSystem, + #name : #TeamManagementSystem, #superclass : #SubsystemImplementation, #instVars : [ 'teams' ], - #category : #'TeamsAPI-Core' + #category : #'TeamsAPI-Core-Systems' } { #category : #installing } -TeamSystem >> dependencies [ +TeamManagementSystem >> dependencies [ ^ #() ] { #category : #initialization } -TeamSystem >> implementedInterfaces [ +TeamManagementSystem >> implementedInterfaces [ ^ #(#TeamSystemInterface) ] { #category : #initialization } -TeamSystem >> initialize [ +TeamManagementSystem >> initialize [ super initialize. teams := OrderedCollection new ] +{ #category : #accessing } +TeamManagementSystem >> name [ + + ^ 'Teams Management System' +] + { #category : #adding } -TeamSystem >> startManagingTeam: aTeam [ +TeamManagementSystem >> startManagingTeam: aTeam [ AssertionChecker enforce: [ teams noneSatisfy: [ :team | team name = aTeam name ] ] because: @@ -34,7 +40,7 @@ TeamSystem >> startManagingTeam: aTeam [ ] { #category : #adding } -TeamSystem >> stopManagingTeam: aTeam [ +TeamManagementSystem >> stopManagingTeam: aTeam [ AssertionChecker enforce: [ teams anySatisfy: [ :team | aTeam = team ] ] because: 'TStop managing team failed because it does not exist in the system.'. @@ -42,6 +48,6 @@ TeamSystem >> stopManagingTeam: aTeam [ ] { #category : #accessing } -TeamSystem >> teams [ +TeamManagementSystem >> teams [ ^ teams ] diff --git a/source/TeamsAPI-Core/TeamsRESTfulController.class.st b/source/TeamsAPI-Core/TeamsRESTfulController.class.st new file mode 100644 index 0000000..c911d9b --- /dev/null +++ b/source/TeamsAPI-Core/TeamsRESTfulController.class.st @@ -0,0 +1,17 @@ +Class { + #name : #TeamsRESTfulController, + #superclass : #ResourceRESTfulController, + #category : #'TeamsAPI-Core-Controllers' +} + +{ #category : #initialization } +TeamsRESTfulController >> initialize [ + super initialize. + +] + +{ #category : #specification } +TeamsRESTfulController >> specification [ + + ^ TeamsRESTfulControllerSpecification new +] diff --git a/source/TeamsAPI-Core/TeamsRESTfulControllerSpecification.class.st b/source/TeamsAPI-Core/TeamsRESTfulControllerSpecification.class.st new file mode 100644 index 0000000..6d2a0e9 --- /dev/null +++ b/source/TeamsAPI-Core/TeamsRESTfulControllerSpecification.class.st @@ -0,0 +1,5 @@ +Class { + #name : #TeamsRESTfulControllerSpecification, + #superclass : #ResourceRESTfulControllerSpecification, + #category : #'TeamsAPI-Core-Controllers' +}