rinvex / laravel-addresses Goto Github PK
View Code? Open in Web Editor NEW⚠️ [ABANDONED] Rinvex Addressable is a polymorphic Laravel package, for addressbook management. You can add addresses to any eloquent model with ease.
License: MIT License
⚠️ [ABANDONED] Rinvex Addressable is a polymorphic Laravel package, for addressbook management. You can add addresses to any eloquent model with ease.
License: MIT License
while installing it not able to install with laravel 5.7
Dependabot can't resolve your PHP dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- felixkiss/uniquewith-validator 3.4.0 requires illuminate/support ^5.5|^6.0|^7.0 -> found illuminate/support[v5.5.0, ..., 5.8.x-dev, v6.0.0, ..., 6.x-dev, v7.0.0, ..., 7.x-dev] but it conflicts with your root composer.json require (^8.0.0 || ^9.0.0).
- rinvex/laravel-support v5.0.0 requires felixkiss/uniquewith-validator ^3.4.0 -> satisfiable by felixkiss/uniquewith-validator[3.4.0].
- Root composer.json requires rinvex/laravel-support ^5.0.0 -> satisfiable by rinvex/laravel-support[v5.0.0].
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
Great package!
Thank you for putting your time into this project and sharing it freely.
I'm struggling to clear the specific address cache on address update.
Currently, I'm reduced to:
\Cache::forget('81ca4acffc20c7eacc78cf266025017b');
Getting the keyId from app/storage/framework/cache/data/rinvex.cacheable.json and hard-coding it into my update() method, which works, but is obviously not a viable solution.
Do you have any suggestions?
Edit:
I have extended the Address model and added a function that I can call to remove all the cached keys, but I would like some way of targeting only the address that was just updated rather than clearing the whole cache:
public static function clearcache()
{
$string = file_get_contents("../storage/framework/cache/data/rinvex.cacheable.json");
$json_a = json_decode($string, true);
foreach ($json_a as $key => $value) {
if($key == "App\Address"){
foreach($value as $id){
\Cache::forget($id);
}
}
}
}
Is there a way I can identify which key is appropriate for a specific user?
Hello,
Any updates for Laravel 6.0?
Thanks.
Its looks great package but I wasn't able to install on my laravel app.
Using version ^0.0.2 for rinvex/addresses
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for rinvex/addresses ^0.0.2 -> satisfiable by rinvex/addresses[v0.0.2].
- rinvex/addresses v0.0.2 requires rinvex/cacheable dev-develop -> satisfiable by rinvex/cacheable[dev-develop] but these conflict with your requirements or minimum-stability.
Installation failed, reverting ./composer.json to its original content.
Hi there,
Is there any way to enable the soft delete functionality? I am checking the tables, there is a column of deleted_at but I couldn't find how to enable it. I have also checked the configuration file. How can we add configurable variable for it?
When the model is returned by an api its shows everything
{
"id": 1,
"addressable_type": "App\\Models\\Business",
"addressable_id": 1,
"given_name": "Abdelrahman 1",
"family_name": "Omran",
"label": "Default Address 1",
"organization": "Rinvex",
"country_code": "eg",
"street": "56 john doe st.",
"state": "Alexandria",
"city": "Alexandria",
"postal_code": "21614",
"latitude": 31.2467601,
"longitude": 29.9020376,
"is_primary": true,
"is_billing": true,
"is_shipping": true,
"created_at": "2020-08-22T22:06:20.000000Z",
"updated_at": "2020-08-22T22:06:20.000000Z",
"deleted_at": null
}
I want to hide "id", "addressable_type", "addressable_id", "is_primary", "is_billing", "is_shipping", "created_at", "updated_at", "deleted_at": null
our requirements could not be resolved to an installable set of packages.
Problem 1
- Conclusion: remove laravel/framework v7.16.1
- Conclusion: don't install laravel/framework v7.16.1
- rinvex/laravel-addresses v3.0.0 requires illuminate/database ^6.0.0
Hi,
Using L^6.2, an error on publishing config and migrations files :
Publish Rinvex Addresses Resources. *
Unable to locate publishable resources.
Publishing complete.
Unable to locate publishable resources.
Publishing complete.
On $addressModel = $location->addresses()->firstOrCreate($address);
{
"message": "Class 'Rinvex\Testimonials\Events\AddressSaved' not found",
"exception": "Symfony\Component\Debug\Exception\FatalThrowableError",
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php",
"line": 205,
"trace": [
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php",
"line": 180,
"function": "fireCustomModelEvent",
"class": "Illuminate\Database\Eloquent\Model",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
"line": 708,
"function": "fireModelEvent",
"class": "Illuminate\Database\Eloquent\Model",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
"line": 679,
"function": "finishSave",
"class": "Illuminate\Database\Eloquent\Model",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php",
"line": 281,
"function": "save",
"class": "Illuminate\Database\Eloquent\Model",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Support/helpers.php",
"line": 422,
"function": "Illuminate\Database\Eloquent\Relations\{closure}",
"class": "Illuminate\Database\Eloquent\Relations\HasOneOrMany",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php",
"line": 282,
"function": "tap"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php",
"line": 220,
"function": "create",
"class": "Illuminate\Database\Eloquent\Relations\HasOneOrMany",
"type": "->"
},
{
"file": "/var/www/app/Http/Controllers/Api/LocationController.php",
"line": 277,
"function": "firstOrCreate",
"class": "Illuminate\Database\Eloquent\Relations\HasOneOrMany",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php",
"line": 29,
"function": "App\Http\Controllers\Api\{closure}",
"class": "App\Http\Controllers\Api\LocationController",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php",
"line": 349,
"function": "transaction",
"class": "Illuminate\Database\Connection",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php",
"line": 261,
"function": "__call",
"class": "Illuminate\Database\DatabaseManager",
"type": "->"
},
{
"file": "/var/www/app/Http/Controllers/Api/LocationController.php",
"line": 296,
"function": "__callStatic",
"class": "Illuminate\Support\Facades\Facade",
"type": "::"
},
{
"function": "update",
"class": "App\Http\Controllers\Api\LocationController",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "call_user_func_array"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 45,
"function": "callAction",
"class": "Illuminate\Routing\Controller",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 219,
"function": "dispatch",
"class": "Illuminate\Routing\ControllerDispatcher",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 176,
"function": "runController",
"class": "Illuminate\Routing\Route",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 681,
"function": "run",
"class": "Illuminate\Routing\Route",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 130,
"function": "Illuminate\Routing\{closure}",
"class": "Illuminate\Routing\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php",
"line": 45,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Auth\Middleware\Authorize",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 41,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Routing\Middleware\SubstituteBindings",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
"line": 59,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Routing\Middleware\ThrottleRequests",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 43,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Auth\Middleware\Authenticate",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 105,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 683,
"function": "then",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 658,
"function": "runRouteWithinStack",
"class": "Illuminate\Routing\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 624,
"function": "runRoute",
"class": "Illuminate\Routing\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 613,
"function": "dispatchToRoute",
"class": "Illuminate\Routing\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 170,
"function": "dispatch",
"class": "Illuminate\Routing\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 130,
"function": "Illuminate\Foundation\Http\{closure}",
"class": "Illuminate\Foundation\Http\Kernel",
"type": "->"
},
{
"file": "/var/www/vendor/barryvdh/laravel-cors/src/HandleCors.php",
"line": 36,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Barryvdh\Cors\HandleCors",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Foundation\Http\Middleware\TransformsRequest",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Foundation\Http\Middleware\TransformsRequest",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Foundation\Http\Middleware\ValidatePostSize",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php",
"line": 62,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode",
"type": "->"
},
{
"file": "/var/www/vendor/fideloper/proxy/src/TrustProxies.php",
"line": 57,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Fideloper\Proxy\TrustProxies",
"type": "->"
},
{
"file": "/var/www/vendor/hyn/multi-tenant/src/Middleware/EagerIdentification.php",
"line": 29,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Hyn\Tenancy\Middleware\EagerIdentification",
"type": "->"
},
{
"file": "/var/www/vendor/hyn/multi-tenant/src/Middleware/HostnameActions.php",
"line": 75,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 171,
"function": "handle",
"class": "Hyn\Tenancy\Middleware\HostnameActions",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 105,
"function": "Illuminate\Pipeline\{closure}",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 145,
"function": "then",
"class": "Illuminate\Pipeline\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 110,
"function": "sendRequestThroughRouter",
"class": "Illuminate\Foundation\Http\Kernel",
"type": "->"
},
{
"file": "/var/www/public/index.php",
"line": 55,
"function": "handle",
"class": "Illuminate\Foundation\Http\Kernel",
"type": "->"
}
]
}
Is there a reason to enable caching by default?
We don't need or rely on caching in our application. We had some weird issues during development which turned out to be related to the cache that's enabled in the model. As we inherited the model and made our changes to the fillable and rules attributes, we ran into unexpected issues.
Would you accept a PR that removes caching by default and allows you to add it if you inherit the class? I do realise that this is a major change as it can have unexpected issues in other applications, but it makes more sense in my mind as it gives more flexibility.
I've a question on how can we add Mutators & Accessors for the data stored using this package, imagine that I want to encrypt the addresses before storing them, is it doable?
Repro :
Extra :
Try install said dependancy, it should fail with :
Problem 1
- Installation request for rinvex/support dev-master -> satisfiable by rinvex/support[dev-master].
- Conclusion: remove laravel/framework v5.5.14
- Conclusion: don't install laravel/framework v5.5.14
Could you please add an API key input to the config file for the geocoding feature to work
https://github.com/felixkiss/uniquewith-validator
is still php 7 bound, maybe drop the dependency as it seems stale.
Sadly like this your fantastic lib isn't compatible with php 8.
Hi there, will this package support toggle between primary address. For example if i set an address to be primary so what about another addresses, could it be set to false?
I added new fields using migration but those fields didn't save records. Please let me know is it possible or not?
Dependabot can't resolve your PHP dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- rinvex/laravel-support[v5.0.0, ..., v5.0.1] require felixkiss/uniquewith-validator ^3.4.0 -> satisfiable by felixkiss/uniquewith-validator[3.4.0].
- rinvex/laravel-support v5.0.2 requires rinvex/tmp-felixkiss-uniquewith-validator 3.4.0 -> satisfiable by rinvex/tmp-felixkiss-uniquewith-validator[3.4.0].
- felixkiss/uniquewith-validator 3.4.0 requires illuminate/support ^5.5|^6.0|^7.0 -> found illuminate/support[v5.5.0, ..., 5.8.x-dev, v6.0.0, ..., 6.x-dev, v7.0.0, ..., 7.x-dev] but it conflicts with your root composer.json require (^8.0.0 || ^9.0.0).
- rinvex/tmp-felixkiss-uniquewith-validator 3.4.0 requires illuminate/support ^5.5|^6.0|^7.0 -> found illuminate/support[v5.5.0, ..., 5.8.x-dev, v6.0.0, ..., 6.x-dev, v7.0.0, ..., 7.x-dev] but it conflicts with your root composer.json require (^8.0.0 || ^9.0.0).
- Root composer.json requires rinvex/laravel-support ^5.0.0 -> satisfiable by rinvex/laravel-support[v5.0.0, v5.0.1, v5.0.2].
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
I've got this sql error when i using findByDistance method.
Column not found: 1054 Unknown column 'addresses.lat' in 'where clause'
Because jackpopp/geodistance's "within" method need lat and lng column instead of latitude and longitude.
Do you have any plan to change that column name from latitude-longitude to lat-lng?
Hi, I have a BadMethodCallException thrown with message "Method [validateCountry] does not exist."
Stacktrace: #69 BadMethodCallException in /var/www/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:1140 #68 Illuminate\Validation\Validator:__call in /var/www/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:359 #67 Illuminate\Validation\Validator:validateAttribute in /var/www/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:268 #66 Illuminate\Validation\Validator:passes in /var/www/vendor/watson/validating/src/ValidatingTrait.php:395 #65 Rinvex\Addresses\Models\Address:performValidation in /var/www/vendor/watson/validating/src/ValidatingTrait.php:248 #64 Rinvex\Addresses\Models\Address:isValid in /var/www/vendor/watson/validating/src/ValidatingObserver.php:51
I'm using laravel 5.5.4
I just manually require rinvex\support package (can you fix this also?) but i have not find country rule.
I need to pass $country_code in create method.
Regards,
Vito
The following two fields are not fillable.
'addressable_id',
'addressable_type',
These two fields are critical and shouldn't be inside the fillable array. A hacker or malicious user can just add two inputs in his form to manipulate other users' information. If you need to use create
or any other mass assignment function that I don't know you have used or not then you can use forceFill()
for these fields carefully.
Hi,
Do you plan to support Laravel 8?
Thanks.
Hi there,
I am deleting the model but it is throwing an exception.
Illuminate/Database/Eloquent/ModelNotFoundException with message 'No query results for model [Rinvex/Addresses/Models/Address].'
The above exception makes the next code invalid and instantly get the 404 not found. After deletion, it should return the "true" boolean value.
My controller code is as below:
public function destroy(Address $location)
{
$business = $location->addressable;
$location->delete();
notify()->success(__('Your location and address is successfully deleted.'));
return redirect()->route('businesses.locations.index', $business);
}
Could you please assist me to resolve the issue?
For our project we need the street number as a separate field and users can add a comment related to the address.
Do you think it could be added ?
Dependabot can't resolve your PHP dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- felixkiss/uniquewith-validator 3.4.0 requires illuminate/support ^5.5|^6.0|^7.0 -> found illuminate/support[v5.5.0, ..., 5.8.x-dev, v6.0.0, ..., 6.x-dev, v7.0.0, ..., 7.x-dev] but it conflicts with your root composer.json require (^8.0.0 || ^9.0.0).
- rinvex/laravel-support v5.0.0 requires felixkiss/uniquewith-validator ^3.4.0 -> satisfiable by felixkiss/uniquewith-validator[3.4.0].
- Root composer.json requires rinvex/laravel-support ^5.0.0 -> satisfiable by rinvex/laravel-support[v5.0.0].
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
I have an issue regarding lat and lng. By default, the float type has only 2 decimals, which isn't precise enough if you want an exact point on the map. I think $table->float('lat', 10, 6)->nullable();
should fix this.
EDIT: Nvm, I saw this is fixed on the develop
branch.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.