Is there any better way to friendship mutation

There are several ways. Here one I can think of.

If you don’t know the UIDs

{

  userA as var(func: eq(name, "UserA"))
  userB as var(func: eq(name, "UserB"))
  
  q(func: type(FriendShip)) @filter(uid_in(requestedBy, uid(userA)) AND uid_in(requestedTo, uid(userB))){
    requestedBy
    requestedTo
    since
  }
}

If you know the UIDs

{

  userA as var(func: uid(0x1))
  userB as var(func: uid(0x2))
  
  q(func: uid(0x33)) @filter(uid_in(requestedBy, uid(userA)) AND uid_in(requestedTo, uid(userB))){
    requestedBy
    requestedTo
    since
  }
}

From User B using Reverse edge index. Avoiding using such wide query as Type()

{
  
  userA as var(func: eq(name, "UserA"))
  userB as var(func: eq(name, "UserB"){
    BY as <~requestedBy>
  }
  
  q(func: uid(BY)) @filter(uid_in(requestedBy, uid(userA)) AND uid_in(requestedTo, uid(userB))){
    requestedBy #This needs a reverse index
    requestedTo #This needs a reverse index
    since
  }
}