PHPackages                             maatify/mongo-activity - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. maatify/mongo-activity

ActiveLibrary[Database &amp; ORM](/categories/database)

maatify/mongo-activity
======================

Track and record user and system activities in MongoDB — structured, PSR-compliant, and easily integrable with maatify/psr-logger.

v1.0.1(4mo ago)121MITPHPPHP ^8.2

Since Dec 30Pushed 4mo agoCompare

[ Source](https://github.com/Maatify/mongo-activity)[ Packagist](https://packagist.org/packages/maatify/mongo-activity)[ RSS](/packages/maatify-mongo-activity/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (5)Versions (3)Used By (0)

[![Maatify.dev](https://camo.githubusercontent.com/bb8bf9ee079d7f823c9d5e94061d1d4c11dc0898e2b1b5cc9a8a7b04d8bfdd7d/68747470733a2f2f7777772e6d6161746966792e6465762f6173736574732f696d672f696d672f6d6161746966795f6c6f676f5f77686974652e737667)](https://camo.githubusercontent.com/bb8bf9ee079d7f823c9d5e94061d1d4c11dc0898e2b1b5cc9a8a7b04d8bfdd7d/68747470733a2f2f7777772e6d6161746966792e6465762f6173736574732f696d672f696d672f6d6161746966795f6c6f676f5f77686974652e737667)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[](#)

[![Version](https://camo.githubusercontent.com/5c139fe12388d75bc62dac8c94f00884c40a26de96556f2942e40f45196b98da/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d6161746966792f6d6f6e676f2d61637469766974793f6c6162656c3d56657273696f6e26636f6c6f723d344331)](https://packagist.org/packages/maatify/mongo-activity)[![PHP](https://camo.githubusercontent.com/7d00f2abfa4de06c0cc4c1f8b6d2404e7e8ecc61c5fab594b42ba39703ad99ff/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6d6161746966792f6d6f6e676f2d61637469766974793f6c6162656c3d50485026636f6c6f723d373737424233)](https://packagist.org/packages/maatify/mongo-activity)[![Build](https://github.com/Maatify/mongo-activity/actions/workflows/test.yml/badge.svg?label=Build&color=brightgreen)](https://github.com/Maatify/mongo-activity/actions/workflows/test.yml)

[![Monthly Downloads](https://camo.githubusercontent.com/93f18bd5fbacadd10dbfea00ee14400ea604aeab27ce08fed3d6aa4e7a7b1b0d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646d2f6d6161746966792f6d6f6e676f2d61637469766974793f6c6162656c3d4d6f6e74686c79253230446f776e6c6f61647326636f6c6f723d303041384538)](https://packagist.org/packages/maatify/mongo-activity)[![Total Downloads](https://camo.githubusercontent.com/f27dd3819ce6075c3855f10b65f1e8386e47c9754105fd132cdda6947c3bdc45/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d6161746966792f6d6f6e676f2d61637469766974793f6c6162656c3d546f74616c253230446f776e6c6f61647326636f6c6f723d324141394530)](https://packagist.org/packages/maatify/mongo-activity)

[![Stars](https://camo.githubusercontent.com/fccb3cb4aaa1440367026881acf3114ce1d12573ef20f802db16a29fed92111e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f4d6161746966792f6d6f6e676f2d61637469766974793f6c6162656c3d537461727326636f6c6f723d4646443433422663616368655365636f6e64733d33363030)](https://github.com/Maatify/mongo-activity/stargazers)[![License](https://camo.githubusercontent.com/d061108ef12e0ef95ee3e82961a1cda46591a5fe38dd0c71030d12340063baed/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f4d6161746966792f6d6f6e676f2d61637469766974793f6c6162656c3d4c6963656e736526636f6c6f723d626c756576696f6c6574)](LICENSE)![Status](https://camo.githubusercontent.com/2128a821a9f55f8f5e5806efa8de7dfe863140215ec85b68a1d4301610cfdd32/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5374617475732d537461626c652d737563636573733f7374796c653d666c61742d737175617265)[![Code Quality](https://camo.githubusercontent.com/aadb965390ed061ca5b9674d7f8ecd5a456861c494cf2ce8b35511d2581f11a1/68747470733a2f2f696d672e736869656c64732e696f2f636f6465666163746f722f67726164652f6769746875622f4d6161746966792f6d6f6e676f2d61637469766974792f6d61696e3f636f6c6f723d627269676874677265656e)](https://www.codefactor.io/repository/github/Maatify/mongo-activity)

[![Changelog](https://camo.githubusercontent.com/32f7664d004132f7e0fb111b5e01bd7270705d1e7247db502287d51910c04cb9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368616e67656c6f672d566965772d626c7565)](CHANGELOG.md)[![Security](https://camo.githubusercontent.com/a150750c8b2c6ca6209aa80bdf220d2f0950b984df64c1b859a46ee9152570f3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53656375726974792d506f6c6963792d696d706f7274616e74)](SECURITY.md)

📊 maatify/mongo-activity
========================

[](#-maatifymongo-activity)

**Advanced MongoDB-based user activity logging system**Designed for tracking, querying, and archiving user/admin actions in a performant, structured, and easily searchable format.

---

🚀 Features
----------

[](#-features)

- ✅ **Structured activity tracking** — supports CRUD + view actions
- ✅ **Enum-based configuration** — roles, modules, and types
- ✅ **Optimized indexes** for performance
- ✅ **Advanced filtering** (user, role, module, type, keyword, date range)
- ✅ **Pagination-ready search results**
- ✅ **Quarter-based archiving system** (auto CRON support)
- ✅ **Environment-independent** — use via DI container
- ✅ **Dual database mode** (active + archive)

---

📁 Project Structure
-------------------

[](#-project-structure)

```
maatify-mongo-activity/
├── src/
│   ├── Contract/
│   │   ├── AppModuleInterface.php
│   │   ├── ActivityTypeInterface.php
│   │   └── UserRoleInterface.php
│   ├── Enum/
│   │   ├── AppModulesEnum.php
│   │   ├── ActivityTypeEnum.php
│   │   └── UserRoleEnum.php
│   ├── DTO/
│   │   └── ActivityRecordDTO.php
│   ├── Repository/
│   │   ├── ActivityRepository.php
│   │   ├── ArchiveRepository.php
│   │   └── PeriodResolverRepository.php
│   ├── Manager/
│   │   └── ActivityArchiveManager.php
│   └── Helpers/
│       └── ActivityPeriodResolver.php
├── scripts/
│   ├── mongo-activity-ensure-indexes.php
│   └── mongo-activity-archive.php
├── .env.example
└── composer.json

```

---

⚙️ Installation
---------------

[](#️-installation)

### 🟢 Public (via Packagist)

[](#-public-via-packagist)

```
composer require maatify/mongo-activity
```

---

### 🔐 Private Repository (VCS)

[](#-private-repository-vcs)

If the library is private and hosted on GitHub, GitLab, or Bitbucket:

```
{
  "repositories": [
    {
      "type": "vcs",
      "url": "git@github.com:maatify/mongo-activity.git"
    }
  ],
  "require": {
    "maatify/mongo-activity": "dev-main"
  }
}
```

Then install:

```
composer update maatify/mongo-activity
```

> ⚠️ Make sure your user has access to the private repository via SSH or a valid Personal Access Token.

---

### 🧱 Local Development (Path Repository)

[](#-local-development-path-repository)

If you are developing both the project and the library locally:

```
{
  "repositories": [
    {
      "type": "path",
      "url": "../maatify/mongo-activity",
      "options": { "symlink": true }
    }
  ],
  "require": {
    "maatify/mongo-activity": "dev-main"
  }
}
```

Install with:

```
composer require maatify/mongo-activity:dev-main
```

> ✅ Any change you make inside the library will instantly reflect in your project (no reinstall required).

---

### 🔑 Using a GitHub Access Token (HTTPS)

[](#-using-a-github-access-token-https)

If you prefer HTTPS authentication instead of SSH:

```
composer config --global github-oauth.github.com ghp_yourAccessTokenHere
```

Then reference your repository as:

```
{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/maatify/mongo-activity.git"
    }
  ],
  "require": {
    "maatify/mongo-activity": "dev-main"
  }
}
```

---

🧩 Environment Example (`.env.example`)
--------------------------------------

[](#-environment-example-envexample)

```
# Mongo Connection
MONGO_URI=mongodb://127.0.0.1:27017

# Databases
MONGO_DB_ACTIVITY=maatify_activity
MONGO_DB_ACTIVITY_ARCHIVE=maatify_activity_archive

# Collections
MONGO_COLLECTION_ACTIVITY=user_activities

# Feature toggle
MONGO_ACTIVITY_ENABLED=true
```

---

🧠 Basic Usage Example
---------------------

[](#-basic-usage-example)

```
use MongoDB\Client;
use Maatify\MongoActivity\Repository\ActivityRepository;
use Maatify\MongoActivity\DTO\ActivityRecordDTO;
use Maatify\MongoActivity\Enum\AppModulesEnum;
use Maatify\MongoActivity\Enum\UserRoleEnum;
use Maatify\MongoActivity\Enum\ActivityTypeEnum;

$client = new Client($_ENV['MONGO_URI']);
$repo   = new ActivityRepository($client);

$repo->insert([
    'user_id'     => 501,
    'role'        => UserRoleEnum::ADMIN->value,
    'type'        => ActivityTypeEnum::UPDATE->value,
    'module'      => AppModulesEnum::PRODUCT->value,
    'action'      => 'edit_price',
    'description' => 'Updated product #312',
    'ref_id'      => 312,
    'created_at'  => new MongoDB\BSON\UTCDateTime(),
]);
```

---

🔍 Searching with Filters
------------------------

[](#-searching-with-filters)

```
$result = $repo->search(
    userId: 501,
    module: AppModulesEnum::PRODUCT,
    keyword: 'price',
    from: '2025-11-01T00:00:00',
    to: '2025-11-05T23:59:59',
    perPage: 10
);
```

---

🗃️ Archiving Old Records
------------------------

[](#️-archiving-old-records)

To move logs older than **6 months** to quarterly archive collections:

```
php scripts/mongo-activity-archive.php
```

It automatically moves data to collections such as:

```
user_activities_archive_2025_0103
user_activities_archive_2025_0406
user_activities_archive_2025_0709
user_activities_archive_2025_1012

```

---

🧱 Ensuring Indexes
------------------

[](#-ensuring-indexes)

To (re)create indexes for faster queries:

```
php scripts/mongo-activity-ensure-indexes.php
```

This ensures indexes for:

- `user_id`
- `created_at`
- `module`
- `role`
- `type`

---

🧩 Basic Usage Example
---------------------

[](#-basic-usage-example-1)

```
use MongoDB\Client;
use Maatify\MongoActivity\Repository\ActivityRepository;
use Maatify\MongoActivity\Enum\AppModulesEnum;
use Maatify\MongoActivity\Enum\UserRoleEnum;
use Maatify\MongoActivity\Enum\ActivityTypeEnum;

$client = new Client($_ENV['MONGO_URI']);
$repo   = new ActivityRepository($client);

$repo->insert([
    'user_id'     => 501,
    'role'        => UserRoleEnum::ADMIN->value,
    'type'        => ActivityTypeEnum::UPDATE->value,
    'module'      => AppModulesEnum::PRODUCT->value,
    'action'      => 'edit_price',
    'description' => 'Updated product #312',
    'ref_id'      => 312,
    'created_at'  => new MongoDB\BSON\UTCDateTime(),
]);
```

---

🔍 Searching with Filters
------------------------

[](#-searching-with-filters-1)

```
$result = $repo->search(
    userId: 501,
    module: AppModulesEnum::PRODUCT,
    keyword: 'price',
    from: '2025-11-01T00:00:00',
    to:   '2025-11-05T23:59:59',
    perPage: 10
);
```

---

🗃️ Archiving Old Records
------------------------

[](#️-archiving-old-records-1)

Move logs older than 6 months to quarterly archive collections:

```
php scripts/mongo-activity-archive.php
```

Creates collections such as:

```
user_activities_archive_2025_0103
user_activities_archive_2025_0406
user_activities_archive_2025_0709
user_activities_archive_2025_1012

```

---

🧱 Ensuring Indexes
------------------

[](#-ensuring-indexes-1)

To (re)create performance indexes:

```
php scripts/mongo-activity-ensure-indexes.php
```

Creates indexes on:

- `user_id`
- `created_at`
- `module`
- `role`
- `type`

---

🔌 Integration with Slim Framework / DI Container
------------------------------------------------

[](#-integration-with-slim-framework--di-container)

### Register the Mongo Client Service

[](#register-the-mongo-client-service)

```
use MongoDB\Client;
use DI\ContainerBuilder;

$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions([
    Client::class => fn() => new Client($_ENV['MONGO_URI']),
]);
$container = $containerBuilder->build();
```

### Register the Activity Repository

[](#register-the-activity-repository)

```
use Maatify\MongoActivity\Repository\ActivityRepository;

$containerBuilder->addDefinitions([
    ActivityRepository::class => fn($c) =>
        new ActivityRepository(
            $c->get(Client::class),
            $_ENV['MONGO_DB_ACTIVITY'],
            $_ENV['MONGO_COLLECTION_ACTIVITY']
        ),
]);
```

### Use inside a Route

[](#use-inside-a-route)

```
$app->post('/log', function ($request, $response) use ($container) {
    $repo = $container->get(ActivityRepository::class);
    $repo->insert([
        'user_id' => 123,
        'role' => 'admin',
        'type' => 'update',
        'module' => 'settings',
        'action' => 'change_password',
        'description' => 'Admin updated user password',
        'created_at' => new MongoDB\BSON\UTCDateTime(),
    ]);
    $response->getBody()->write('Activity logged.');
    return $response;
});
```

---

🧩 CRON Tasks Summary
--------------------

[](#-cron-tasks-summary)

ScriptPurposeSchedule`scripts/mongo-activity-archive.php`Archive logs older than 6 monthsEvery 6 months`scripts/mongo-activity-ensure-indexes.php`Verify indexes for all collectionsOnce after deployment---

⚙️ Requirements
---------------

[](#️-requirements)

DependencyMinimum VersionNotesPHP**8.4**Native enums &amp; readonly props`mongodb/mongodb`**2+**Official MongoDB driver`vlucas/phpdotenv`**5.6+**For `.env` loading (optional)---

🧰 Dependencies
--------------

[](#-dependencies)

- PHP ≥ 8.4
- `mongodb/mongodb` ≥ 2
- `vlucas/phpdotenv` ≥ 5.6

---

🪪 License
---------

[](#-license)

**[MIT license](LICENSE)** © [Maatify.dev](https://www.maatify.dev)

You’re free to use, modify, and distribute this library with attribution.

---

🧑‍💻 Maintainer
--------------

[](#‍-maintainer)

**Maatify.dev**

---

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance75

Regular maintenance activity

Popularity5

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 92.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

136d ago

PHP version history (2 changes)v1.0.0PHP ^8.4

v1.0.1PHP ^8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/1a885a0810f2762586520ab284c9019aaf0b650b53cdf2a6c13ea10931bb7795?d=identicon)[Maatify](/maintainers/Maatify)

---

Top Contributors

[![megyptm](https://avatars.githubusercontent.com/u/33574895?v=4)](https://github.com/megyptm "megyptm (13 commits)")[![Maatify](https://avatars.githubusercontent.com/u/130119162?v=4)](https://github.com/Maatify "Maatify (1 commits)")

---

Tags

activity-logarchivingaudit-logclean-architecturedtoinfra-libraryloggingmaatifymongodbphprepository-patternmongodbaudit-trailPHP LibraryActivity Logsmaatifypsr-logger

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/maatify-mongo-activity/health.svg)

```
[![Health](https://phpackages.com/badges/maatify-mongo-activity/health.svg)](https://phpackages.com/packages/maatify-mongo-activity)
```

###  Alternatives

[mongodb/laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel

7.1k7.2M71](/packages/mongodb-laravel-mongodb)[mongodb/mongodb

MongoDB driver library

1.6k64.0M546](/packages/mongodb-mongodb)[doctrine/mongodb-odm

PHP Doctrine MongoDB Object Document Mapper (ODM) provides transparent persistence for PHP objects to MongoDB.

1.1k23.3M302](/packages/doctrine-mongodb-odm)[friendsofsymfony/elastica-bundle

Elasticsearch PHP integration for your Symfony project using Elastica

1.3k17.2M47](/packages/friendsofsymfony-elastica-bundle)[doctrine/mongodb-odm-bundle

Symfony Doctrine MongoDB Bundle

38418.7M195](/packages/doctrine-mongodb-odm-bundle)[alcaeus/mongo-php-adapter

Adapter to provide ext-mongo interface on top of mongo-php-library

46412.3M73](/packages/alcaeus-mongo-php-adapter)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
