feat,refac: 경매장 재설계, 유니크 경매장 구현 (#221)

- 경매장을 모든 입찰 기록이 남는 새로운 경매장 로직으로 변경
  - ng_auction, ng_auction_bid
    - DTO 사용
  - 상회입찰 시 개인메시지로 알림
- 기존의 '배경에서 조용히 이루어지는' 유니크 입찰을 공개된 유니크 경매장으로 변경
  - 종료 기간 명시
    - 종료 기간에 가까워질때 입찰하면 자동 연장
    - 최대 연장기간 있음
  - 유니크 제한인 경우 24턴 연장
  - 중원정세에서 '보물수배'로 알림

Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/221
This commit was merged in pull request #221.
This commit is contained in:
2022-06-09 01:21:55 +09:00
parent 7964aa5f6b
commit dd38344319
64 changed files with 3053 additions and 1530 deletions
+2 -2
View File
@@ -98,10 +98,10 @@ class APIHelper
}
Json::die($result, $setCache ? 0 : Json::NO_CACHE);
} catch (\Exception $e) {
Json::dieWithReason($e->getMessage());
Json::dieWithReason($e->getMessage()."\n".$e->getTraceAsString());
} catch (\Throwable $e) {
logExceptionByCustomHandler($e, false);
Json::dieWithReason($e->getMessage());
Json::dieWithReason($e->getMessage()."\n".$e->getTraceAsString());
} catch (mixed $e) {
Json::dieWithReason(strval($e));
}
+11 -4
View File
@@ -78,11 +78,18 @@ class DefaultConverter implements Converter
return $raw;
}
if($type === 'bool' && is_bool($raw)){
$success = true;
return $raw;
if($type === 'bool'){
if(is_bool($raw)){
$success = true;
return $raw;
}
if($raw === 0 || $raw === 1){
$success = true;
return $raw !== 0;
}
}
return null;
}
@@ -100,7 +107,7 @@ class DefaultConverter implements Converter
}
}
throw new \Exception('DefaultConverter can not convert');
throw new \Exception('DefaultConverter can not convert '.gettype($raw));
}
public function convertTo(mixed $data): string|array|int|float|bool|null
+9 -15
View File
@@ -2,6 +2,7 @@
namespace sammo\DTO;
use Ds\Set;
use sammo\DTO\Attr\Convert;
use sammo\DTO\Converter\DefaultConverter;
@@ -110,10 +111,13 @@ abstract class DTO
return $object;
}
public function toArray(): array
public function toArray(string ...$exceptKeys): array
{
$reflection = new \ReflectionClass($this::class);
$result = [];
$exceptKeySet = new Set($exceptKeys);
foreach ($reflection->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) {
$value = $property->getValue($this);
$attrs = Util\DTOUtil::getAttrs($property);
@@ -123,6 +127,10 @@ abstract class DTO
continue;
}
if($exceptKeySet->contains($name)){
continue;
}
if (key_exists(Attr\RawName::class, $attrs)) {
$rawAttr = $attrs[Attr\RawName::class];
$attr = new Attr\RawName(...$rawAttr->getArguments());
@@ -153,18 +161,4 @@ abstract class DTO
}
return $result;
}
public function toArrayExcept(string ...$keys): array{
$reflection = new \ReflectionClass($this::class);
$values = $this->toArray();
foreach($keys as $key){
if(!$reflection->hasProperty($key)){
throw new \Exception("Key {$key} does not exist");
}
if(key_exists($key, $values)){
unset($values[$key]);
}
}
return $values;
}
}