Skip to content

Commit 60a3d98

Browse files
jenkins-botGerrit Code Review
authored andcommitted
Merge "REST: Use read models for statement "main snak""
2 parents 5d129d8 + 44bf1db commit 60a3d98

13 files changed

+86
-26
lines changed

repo/rest-api/src/Domain/ReadModel/Statement.php

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Wikibase\Repo\RestApi\Domain\ReadModel;
44

55
use Wikibase\DataModel\ReferenceList;
6-
use Wikibase\DataModel\Snak\Snak;
76
use Wikibase\DataModel\Snak\SnakList;
87
use Wikibase\DataModel\Statement\StatementGuid;
98

@@ -13,21 +12,24 @@
1312
class Statement {
1413

1514
private StatementGuid $guid;
15+
private Property $property;
16+
private Value $value;
1617
private Rank $rank;
17-
private Snak $mainSnak;
1818
private SnakList $qualifiers;
1919
private ReferenceList $references;
2020

2121
public function __construct(
2222
StatementGuid $guid,
23+
Property $property,
24+
Value $value,
2325
Rank $rank,
24-
Snak $mainSnak,
2526
SnakList $qualifiers,
2627
ReferenceList $references
2728
) {
2829
$this->guid = $guid;
30+
$this->property = $property;
31+
$this->value = $value;
2932
$this->rank = $rank;
30-
$this->mainSnak = $mainSnak;
3133
$this->qualifiers = $qualifiers;
3234
$this->references = $references;
3335
}
@@ -36,12 +38,16 @@ public function getGuid(): StatementGuid {
3638
return $this->guid;
3739
}
3840

39-
public function getRank(): Rank {
40-
return $this->rank;
41+
public function getProperty(): Property {
42+
return $this->property;
43+
}
44+
45+
public function getValue(): Value {
46+
return $this->value;
4147
}
4248

43-
public function getMainSnak(): Snak {
44-
return $this->mainSnak;
49+
public function getRank(): Rank {
50+
return $this->rank;
4551
}
4652

4753
public function getQualifiers(): SnakList {

repo/rest-api/src/Domain/Services/StatementReadModelConverter.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,43 @@
22

33
namespace Wikibase\Repo\RestApi\Domain\Services;
44

5+
use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
6+
use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookupException;
57
use Wikibase\DataModel\Services\Statement\StatementGuidParser;
8+
use Wikibase\DataModel\Snak\PropertyValueSnak;
69
use Wikibase\DataModel\Statement\Statement as DataModelStatement;
10+
use Wikibase\Repo\RestApi\Domain\ReadModel\Property;
711
use Wikibase\Repo\RestApi\Domain\ReadModel\Rank;
812
use Wikibase\Repo\RestApi\Domain\ReadModel\Statement as ReadModelStatement;
13+
use Wikibase\Repo\RestApi\Domain\ReadModel\Value;
914

1015
/**
1116
* @license GPL-2.0-or-later
1217
*/
1318
class StatementReadModelConverter {
1419

1520
private StatementGuidParser $statementIdParser;
21+
private PropertyDataTypeLookup $dataTypeLookup;
1622

17-
public function __construct( StatementGuidParser $statementIdParser ) {
23+
public function __construct( StatementGuidParser $statementIdParser, PropertyDataTypeLookup $dataTypeLookup ) {
1824
$this->statementIdParser = $statementIdParser;
25+
$this->dataTypeLookup = $dataTypeLookup;
1926
}
2027

2128
public function convert( DataModelStatement $inputStatement ): ReadModelStatement {
29+
$mainSnak = $inputStatement->getMainSnak();
30+
31+
try {
32+
$dataType = $this->dataTypeLookup->getDataTypeIdForProperty( $inputStatement->getPropertyId() );
33+
} catch ( PropertyDataTypeLookupException $e ) {
34+
$dataType = null;
35+
}
36+
2237
return new ReadModelStatement(
2338
$this->statementIdParser->parse( $inputStatement->getGuid() ),
39+
new Property( $inputStatement->getPropertyId(), $dataType ),
40+
new Value( $mainSnak->getType(), $mainSnak instanceof PropertyValueSnak ? $mainSnak->getDataValue() : null ),
2441
new Rank( $inputStatement->getRank() ),
25-
$inputStatement->getMainSnak(),
2642
$inputStatement->getQualifiers(),
2743
$inputStatement->getReferences()
2844
);

repo/rest-api/src/Serialization/StatementListSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public function serialize( StatementList $statementList ): ArrayObject {
2020
$serialization = new ArrayObject();
2121

2222
foreach ( $statementList as $statement ) {
23-
$propertyId = $statement->getMainSnak()->getPropertyId()->getSerialization();
23+
$propertyId = $statement->getProperty()->getId()->getSerialization();
2424
$serialization[$propertyId][] = $this->statementSerializer->serialize( $statement );
2525
}
2626

repo/rest-api/src/Serialization/StatementSerializer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Wikibase\DataModel\Reference;
66
use Wikibase\DataModel\Snak\Snak;
77
use Wikibase\DataModel\Statement\Statement as DataModelStatement;
8+
use Wikibase\Repo\RestApi\Domain\ReadModel\PropertyValuePair;
89
use Wikibase\Repo\RestApi\Domain\ReadModel\Statement;
910

1011
/**
@@ -39,7 +40,7 @@ public function serialize( Statement $statement ): array {
3940
iterator_to_array( $statement->getReferences() )
4041
),
4142
],
42-
$this->propertyValuePairSerializer->serializeSnak( $statement->getMainSnak() )
43+
$this->propertyValuePairSerializer->serialize( new PropertyValuePair( $statement->getProperty(), $statement->getValue() ) )
4344
);
4445
}
4546

repo/rest-api/src/WbRestApi.ServiceWiring.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,10 @@
217217
'WbRestApi.ItemDataRetriever' => function( MediaWikiServices $services ): ItemDataRetriever {
218218
return new WikibaseEntityLookupItemDataRetriever(
219219
WikibaseRepo::getEntityLookup( $services ),
220-
new StatementReadModelConverter( WikibaseRepo::getStatementGuidParser( $services ) ),
220+
new StatementReadModelConverter(
221+
WikibaseRepo::getStatementGuidParser( $services ),
222+
WikibaseRepo::getPropertyDataTypeLookup()
223+
),
221224
new SiteLinksReadModelConverter( $services->getSiteLookup() )
222225
);
223226
},
@@ -229,7 +232,10 @@
229232
WikibaseRepo::getLogger( $services ),
230233
new EditSummaryFormatter( WikibaseRepo::getSummaryFormatter( $services ) ),
231234
$services->getPermissionManager(),
232-
new StatementReadModelConverter( new StatementGuidParser( new ItemIdParser() ) )
235+
new StatementReadModelConverter(
236+
WikibaseRepo::getStatementGuidParser( $services ),
237+
WikibaseRepo::getPropertyDataTypeLookup()
238+
)
233239
);
234240
},
235241

repo/rest-api/tests/phpunit/DataAccess/MediaWikiEditEntityFactoryItemUpdaterIntegrationTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Wikibase\DataModel\Entity\Item;
1010
use Wikibase\DataModel\Entity\ItemId;
1111
use Wikibase\DataModel\Entity\ItemIdParser;
12+
use Wikibase\DataModel\Services\Lookup\InMemoryDataTypeLookup;
1213
use Wikibase\DataModel\Services\Statement\StatementGuidParser;
1314
use Wikibase\DataModel\Statement\StatementGuid;
1415
use Wikibase\DataModel\Tests\NewItem;
@@ -77,7 +78,7 @@ public function testUpdate_replaceStatementOnItem(): void {
7778
$statementList = $newRevision->getItem()->getStatements();
7879
$this->assertSame(
7980
$newValue,
80-
$statementList->getStatementById( $statementGuid )->getMainSnak()->getDataValue()->getValue()
81+
$statementList->getStatementById( $statementGuid )->getValue()->getContent()->getValue()
8182
);
8283
}
8384

@@ -100,7 +101,7 @@ private function newItemUpdater(): MediaWikiEditEntityFactoryItemUpdater {
100101
new NullLogger(),
101102
$this->createStub( EditSummaryFormatter::class ),
102103
$permissionManager,
103-
new StatementReadModelConverter( new StatementGuidParser( new ItemIdParser() ) )
104+
new StatementReadModelConverter( new StatementGuidParser( new ItemIdParser() ), new InMemoryDataTypeLookup() )
104105
);
105106
}
106107

repo/rest-api/tests/phpunit/DataAccess/MediaWikiEditEntityFactoryItemUpdaterTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use User;
1414
use Wikibase\DataModel\Entity\Item;
1515
use Wikibase\DataModel\Entity\ItemIdParser;
16+
use Wikibase\DataModel\Services\Lookup\InMemoryDataTypeLookup;
1617
use Wikibase\DataModel\Services\Statement\StatementGuidParser;
1718
use Wikibase\DataModel\Tests\NewItem;
1819
use Wikibase\DataModel\Tests\NewStatement;
@@ -229,7 +230,7 @@ private function newItemUpdater(): MediaWikiEditEntityFactoryItemUpdater {
229230
$this->logger,
230231
$this->summaryFormatter,
231232
$this->permissionManager,
232-
new StatementReadModelConverter( new StatementGuidParser( new ItemIdParser() ) )
233+
new StatementReadModelConverter( new StatementGuidParser( new ItemIdParser() ), new InMemoryDataTypeLookup() )
233234
);
234235
}
235236

repo/rest-api/tests/phpunit/DataAccess/WikibaseEntityLookupItemDataRetrieverTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Wikibase\DataModel\Entity\ItemId;
1212
use Wikibase\DataModel\Entity\NumericPropertyId;
1313
use Wikibase\DataModel\Services\Lookup\EntityLookup;
14+
use Wikibase\DataModel\Services\Lookup\InMemoryDataTypeLookup;
1415
use Wikibase\DataModel\Statement\StatementGuid;
1516
use Wikibase\DataModel\Tests\NewItem;
1617
use Wikibase\DataModel\Tests\NewStatement;
@@ -271,7 +272,7 @@ private function newEntityLookupForIdWithReturnValue( ItemId $id, ?Item $returnV
271272
}
272273

273274
private function newStatementReadModelConverter(): StatementReadModelConverter {
274-
return new StatementReadModelConverter( WikibaseRepo::getStatementGuidParser() );
275+
return new StatementReadModelConverter( WikibaseRepo::getStatementGuidParser(), new InMemoryDataTypeLookup() );
275276
}
276277

277278
private function newSiteLinksReadModelConverter(): SiteLinksReadModelConverter {

repo/rest-api/tests/phpunit/Domain/ReadModel/NewStatementReadModel.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Wikibase\Repo\Tests\RestApi\Domain\ReadModel;
44

5+
use Wikibase\DataModel\Services\Lookup\InMemoryDataTypeLookup;
56
use Wikibase\DataModel\Tests\NewStatement;
67
use Wikibase\Repo\RestApi\Domain\ReadModel\Statement;
78
use Wikibase\Repo\RestApi\Domain\Services\StatementReadModelConverter;
@@ -13,7 +14,7 @@
1314
class NewStatementReadModel extends NewStatement {
1415

1516
public function build(): Statement {
16-
return ( new StatementReadModelConverter( WikibaseRepo::getStatementGuidParser() ) )
17+
return ( new StatementReadModelConverter( WikibaseRepo::getStatementGuidParser(), new InMemoryDataTypeLookup() ) )
1718
->convert( parent::build() );
1819
}
1920

repo/rest-api/tests/phpunit/Domain/ReadModel/StatementListTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44

55
use PHPUnit\Framework\TestCase;
66
use Wikibase\DataModel\Entity\ItemId;
7+
use Wikibase\DataModel\Entity\NumericPropertyId;
78
use Wikibase\DataModel\ReferenceList;
8-
use Wikibase\DataModel\Snak\Snak;
99
use Wikibase\DataModel\Snak\SnakList;
1010
use Wikibase\DataModel\Statement\StatementGuid;
11+
use Wikibase\Repo\RestApi\Domain\ReadModel\Property;
1112
use Wikibase\Repo\RestApi\Domain\ReadModel\Rank;
1213
use Wikibase\Repo\RestApi\Domain\ReadModel\Statement;
1314
use Wikibase\Repo\RestApi\Domain\ReadModel\StatementList;
15+
use Wikibase\Repo\RestApi\Domain\ReadModel\Value;
1416

1517
/**
1618
* @covers \Wikibase\Repo\RestApi\Domain\ReadModel\StatementList
@@ -44,8 +46,9 @@ public function testGivenStatementWithIdDoesNotExist_getStatementByIdReturnsNull
4446
private function newStatementWithId( StatementGuid $id ): Statement {
4547
return new Statement(
4648
$id,
49+
new Property( new NumericPropertyId( 'P123' ), 'string' ),
50+
new Value( Value::TYPE_SOME_VALUE ),
4751
Rank::normal(),
48-
$this->createStub( Snak::class ),
4952
new SnakList(),
5053
new ReferenceList()
5154
);

0 commit comments

Comments
 (0)