99 * file that was distributed with this source code.
1010 */
1111
12- namespace Zenstruck \Foundry \Persistence \ Proxy ;
12+ namespace Zenstruck \Foundry \Persistence ;
1313
1414use Zenstruck \Foundry \Configuration ;
15+ use Zenstruck \Foundry \Persistence \Event \AfterPersist ;
1516
1617/**
1718 * @internal
@@ -23,50 +24,51 @@ final class PersistedObjectsTracker
2324 *
2425 * @var \WeakMap<object, mixed> keys: objects, values: value ids
2526 */
26- private static \WeakMap $ buffer ;
27+ private static \WeakMap $ trackedObjects ;
2728
2829 public function __construct ()
2930 {
30- self ::$ buffer ??= new \WeakMap ();
31+ self ::$ trackedObjects ??= new \WeakMap ();
3132 }
3233
3334 public function refresh (): void
3435 {
3536 self ::proxifyObjects ();
3637 }
3738
38- public function add (object ...$ objects ): void
39+ /**
40+ * @param AfterPersist<object> $event
41+ */
42+ public function afterPersistHook (AfterPersist $ event ): void
3943 {
40- foreach ($ objects as $ object ) {
41- if (self ::$ buffer ->offsetExists ($ object ) && self ::$ buffer [$ object ]) {
42- self ::proxifyObject ($ object , self ::$ buffer [$ object ]);
43-
44- continue ;
45- }
46-
47- self ::$ buffer [$ object ] = Configuration::instance ()->persistence ()->getIdentifierValues ($ object );
44+ if ($ event ->factory instanceof PersistentProxyObjectFactory || !$ event ->factory ->isAutorefreshEnabled ()) {
45+ return ;
4846 }
47+
48+ $ this ->add ($ event ->object );
4949 }
5050
51- public static function updateIds ( ): void
51+ public function add ( object ... $ objects ): void
5252 {
53- foreach (self ::$ buffer as $ object => $ id ) {
54- if ($ id ) {
53+ foreach ($ objects as $ object ) {
54+ if (self ::$ trackedObjects ->offsetExists ($ object ) && self ::$ trackedObjects [$ object ]) {
55+ self ::proxifyObject ($ object , self ::$ trackedObjects [$ object ]);
56+
5557 continue ;
5658 }
5759
58- self ::$ buffer [$ object ] = Configuration::instance ()->persistence ()->getIdentifierValues ($ object );
60+ self ::$ trackedObjects [$ object ] = Configuration::instance ()->persistence ()->getIdentifierValues ($ object );
5961 }
6062 }
6163
6264 public static function reset (): void
6365 {
64- self ::$ buffer = new \WeakMap ();
66+ self ::$ trackedObjects = new \WeakMap ();
6567 }
6668
6769 public static function countObjects (): int
6870 {
69- return \count (self ::$ buffer );
71+ return \count (self ::$ trackedObjects );
7072 }
7173
7274 private static function proxifyObjects (): void
@@ -75,7 +77,7 @@ private static function proxifyObjects(): void
7577 return ;
7678 }
7779
78- foreach (self ::$ buffer as $ object => $ id ) {
80+ foreach (self ::$ trackedObjects as $ object => $ id ) {
7981 if (!$ id ) {
8082 continue ;
8183 }
0 commit comments