( ′∀`)σ≡σ☆))Д′)レ(゚∀゚;)ヘ=З=З=Зε≡(ノ´_ゝ`)ノ
<?php
// idp/user_sync.php
require_once 'db_master.php';
require_once 'db_project.php';
// Interface for project user sync handlers
interface ProjectUserSyncInterface {
public function findUser($masterUserId);
public function createUser($masterUserId, $userData);
}
// Project 1 user sync handler (example schema)
class Project1UserSync implements ProjectUserSyncInterface {
private $pdo;
public function __construct() {
$this->pdo = getProject1DBConnection();
}
public function findUser($masterUserId) {
$stmt = $this->pdo->prepare('SELECT * FROM usertbl WHERE master_user_id = :master_user_id LIMIT 1');
$stmt->execute(['master_user_id' => $masterUserId]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function createUser($masterUserId, $userData) {
// Project1 user table has columns: master_user_id, full_name, role
$stmt = $this->pdo->prepare('INSERT INTO usertbl (master_user_id, u_name, u_email) VALUES (:master_user_id, :u_name, :u_email)');
$stmt->execute([
'master_user_id' => $masterUserId,
'u_name' => $userData['user_name'] ?? $userData['user_name'],
'u_email' => $userData['user_email'] ?? 'user',
]);
return $this->findUser($masterUserId);
}
}
// Project 2 user sync handler (different schema example)
class Project2UserSync implements ProjectUserSyncInterface {
private $pdo;
public function __construct() {
$this->pdo = getProject2DBConnection();
}
public function findUser($masterUserId) {
// Project2 user table has columns: id, master_ref_id, email, status
$stmt = $this->pdo->prepare('SELECT * FROM project2_users WHERE master_ref_id = :master_ref_id LIMIT 1');
$stmt->execute(['master_ref_id' => $masterUserId]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function createUser($masterUserId, $userData) {
// Insert with default status active
$stmt = $this->pdo->prepare('INSERT INTO project2_users (master_ref_id, email, status) VALUES (:master_ref_id, :email, :status)');
$stmt->execute([
'master_ref_id' => $masterUserId,
'email' => $userData['email'],
'status' => 'active',
]);
return $this->findUser($masterUserId);
}
}
// Generic sync function
function syncUserAcrossDatabases($userData, ProjectUserSyncInterface $projectSyncHandler) {
// Sync master user
$masterUser = findUserInMasterDB($userData['email']);
if (!$masterUser) {
$masterUser = createUserInMasterDB($userData);
}
// Sync project user via handler
$projectUser = $projectSyncHandler->findUser($masterUser['id']);
if (!$projectUser) {
$projectUser = $projectSyncHandler->createUser($masterUser['id'], $userData);
}
return [
'masterUser' => $masterUser,
'projectUser' => $projectUser
];
}